Händelseidentifierare (händelseloggning)
Händelseidentifierare identifierar unikt en viss händelse. Varje händelsekälla kan definiera sina egna numrerade händelser och de beskrivningssträngar som de mappas till i meddelandefilen. Händelsevisningsprogram kan presentera dessa strängar för användaren. De bör hjälpa användaren att förstå vad som gick fel och föreslå vilka åtgärder som ska utföras. Dirigera beskrivningen till användare som löser sina egna problem, inte hos administratörer eller supporttekniker. Mer information finns i riktlinjer för felmeddelanden.
Format
Följande diagram illustrerar formatet för en händelseidentifierare.
3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+---+-+-+-----------------------+-------------------------------+
|Sev|C|R| Facility | Code |
+---+-+-+-----------------------+-------------------------------+
-
Sev
-
Stränghet. Allvarlighetsgraden definieras på följande sätt:
- 00 – Lyckades
- 01 – Information
- 10 - Varning
- 11 – Fel
-
C
-
Kundbit. Den här biten definieras på följande sätt:
- 0 – Systemkod
- 1 – Kundkod
-
R
-
Reserverad bit.
-
anläggning
-
Anläggningskod. Det här värdet kan vara FACILITY_NULL.
-
Code
-
Statuskod för anläggningen.
Meddelandedefinitioner
Meddelanden definieras i händelsemeddelandefilen. Beskrivningssträngarna i händelsemeddelandefilen indexeras efter händelseidentifierare, vilket gör att Loggboken kan visa händelsespecifik text för alla händelser baserat på händelseidentifieraren. Alla beskrivningar är lokaliserade och språkberoende. Mer information om hur du skapar en meddelandefil finns i Message Text Files.
Beskrivningssträngarna kan innehålla infogningssträngens platshållare, formuläret %n, där %1 anger den första insättningssträngen och så vidare. Följande är till exempel en exempelpost i .mc-filen:
MessageId=0x4
Severity=Error
Facility=System
SymbolicName=MSG_CMD_DELETE
Language=English
File %1 contains %2, which is in error.
.
I det här fallet innehåller bufferten som returneras av ReadEventLog infogningssträngar. NumStrings medlem i EVENTLOGRECORD- struktur anger antalet insättningssträngar. StringOffset medlem i EVENTLOGRECORD- struktur anger platsen för den första insättningssträngen i bufferten. Du kan skicka en matris med DWORD_PTRs som pekar på varje sträng i bufferten när du anropar funktionen FormatMessage och då infogas strängarna i meddelandet.
Beskrivningssträngen kan också innehålla platshållare för parametersträngar från parametermeddelandefilen. Platshållarna är av formuläret %%n, där %%1 ersätts av parametersträngen med identifieraren 1 och så vidare. Det är dock upp till dig att infoga parametersträngarna i meddelandesträngen som FormatMessage- returnerar. Vanligtvis anropar du FormatMessage för att hämta meddelandesträngen för händelsen. Sedan parsar du meddelandesträngen för %%n parametrar. Om meddelandet innehåller en eller flera parametrar läser du in ParameterMessageFile registervärde för källan. För varje parameter i meddelandesträngen hämtar du identifieraren och skickar den till FormatMessage för att hämta parametersträngen. Ersätt parametern i meddelandesträngen med parametersträngen som FormatMessage returnerade.
Infogningssträngar
Infogningssträngar är valfria språkoberoende strängar som används för att fylla i värden för platshållare i beskrivningssträngar. Eftersom strängarna inte är lokaliserade är det viktigt att dessa platshållare endast används för att representera språkoberoende strängar som numeriska värden, filnamn, användarnamn och så vidare. Stränglängden får inte överstiga 32 kilobyte – 1 tecken.
Undvik att använda flera strängar för att skapa en större beskrivning. En insättningssträng ska behandlas som data, inte som text. I följande exempel bör till exempel pszString1 och pszString2 inte användas som infogningssträngar för pszDescription.
LPSTR pszString1 = "successfully";
LPSTR pszString2 = "not";
LPSTR pszDescription = "The user was %1 added to the database.";
I följande exempel är det lämpligt att använda antingen pszString1 eller pszString2 för insättningssträngen i pszDescription.
LPSTR pszString1 = "c:\\testapp1.c";
LPSTR pszString2 = "c:\\testapp2.c";
LPSTR pszDescription = "Access denied. Attempted to open the file %1."