Gebeurtenis-id's (logboekregistratie van gebeurtenissen)
Gebeurtenis-id's identificeren een bepaalde gebeurtenis op unieke wijze. Elke gebeurtenisbron kan eigen genummerde gebeurtenissen en de beschrijvingstekenreeksen definiëren waaraan ze zijn toegewezen in het berichtbestand. Gebeurtenisviewers kunnen deze tekenreeksen aan de gebruiker presenteren. Ze moeten de gebruiker helpen begrijpen wat er mis is gegaan en voorstellen welke acties moeten worden ondernomen. Richt de beschrijving bij gebruikers die hun eigen problemen oplossen, niet bij beheerders of ondersteuningstechnici. Zie richtlijnen voor foutberichtenvoor meer informatie.
Formatteren
In het volgende diagram ziet u de indeling van een gebeurtenis-id.
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 |
+---+-+-+-----------------------+-------------------------------+
-
ev
-
Strengheid. De ernst wordt als volgt gedefinieerd:
- 00 - Geslaagd
- 01 - Informatie
- 10 - Waarschuwing
- 11 - Fout
-
C
-
Klantbit. Deze bit wordt als volgt gedefinieerd:
- 0 - Systeemcode
- 1 - Klantcode
-
R
-
Gereserveerde bit.
-
Faciliteit
-
Faciliteitcode. Deze waarde kan worden FACILITY_NULL.
-
code
-
Statuscode voor de faciliteit.
Berichtdefinities
Berichten worden gedefinieerd in het gebeurtenisberichtbestand. De beschrijvingstekenreeksen in het gebeurtenisberichtbestand worden geïndexeerd op gebeurtenis-id, zodat Logboeken gebeurtenisspecifieke tekst voor elke gebeurtenis kunnen weergeven op basis van de gebeurtenis-id. Alle beschrijvingen zijn gelokaliseerd en taalafhankelijk. Zie Message Text Filesvoor meer informatie over het bouwen van een berichtbestand.
De beschrijvingstekenreeksen kunnen tijdelijke aanduidingen voor invoegtekenreeksen bevatten, van het formulier %n, waarbij %1 de eerste invoegtekenreeks aangeeft, enzovoort. Het volgende is bijvoorbeeld een voorbeeldvermelding in het MC-bestand:
MessageId=0x4
Severity=Error
Facility=System
SymbolicName=MSG_CMD_DELETE
Language=English
File %1 contains %2, which is in error.
.
In dit geval bevat de buffer die wordt geretourneerd door ReadEventLog- invoegtekenreeksen. De NumStrings lid van de EVENTLOGRECORD structuur geeft het aantal invoegtekenreeksen aan. De StringOffset lid van de EVENTLOGRECORD structuur geeft de locatie aan van de eerste invoegtekenreeks in de buffer. U kunt een matrix van DWORD_PTRs doorgeven die verwijzen naar het adres van elke tekenreeks in de buffer wanneer u de functie FormatMessage aanroept, waarna de tekenreeksen in het bericht worden ingevoegd.
De beschrijvingstekenreeks kan ook tijdelijke aanduidingen bevatten voor parametertekenreeksen uit het parameterberichtbestand. De tijdelijke aanduidingen zijn van het formulier %%n, waarbij %%1 wordt vervangen door de parametertekenreeks door de id van 1, enzovoort. Het is echter aan u om de parametertekenreeksen in te voegen in de berichttekenreeks die FormatMessage retourneert. Normaal gesproken roept u FormatMessage- aan om de berichttekenreeks voor de gebeurtenis op te halen. Vervolgens parseert u de berichttekenreeks voor %%n parameters. Als het bericht een of meer parameters bevat, laadt u de ParameterMessageFile registerwaarde voor de bron. Voor elke parameter in de berichttekenreeks haalt u de id op en geeft u deze door aan FormatMessage om de parametertekenreeks op te halen. Vervang de parameter in de berichttekenreeks door de parametertekenreeks die FormatMessage geretourneerd.
Invoegtekenreeksen
Invoegtekenreeksen zijn optionele taalonafhankelijke tekenreeksen die worden gebruikt om waarden in te vullen voor tijdelijke aanduidingen in beschrijvingstekenreeksen. Omdat de tekenreeksen niet zijn gelokaliseerd, is het essentieel dat deze tijdelijke aanduidingen alleen worden gebruikt om taalonafhankelijke tekenreeksen weer te geven, zoals numerieke waarden, bestandsnamen, gebruikersnamen, enzovoort. De tekenreekslengte mag niet groter zijn dan 32 kilobytes - 1 tekens.
Vermijd het gebruik van verschillende tekenreeksen om een grotere beschrijving te maken. Een invoegtekenreeks moet worden behandeld als gegevens, niet als tekst. In het volgende voorbeeld mogen bijvoorbeeld pszString1 en pszString2 niet worden gebruikt als invoegtekenreeksen voor pszDescription.
LPSTR pszString1 = "successfully";
LPSTR pszString2 = "not";
LPSTR pszDescription = "The user was %1 added to the database.";
In het volgende voorbeeld is het geschikt om pszString1 of pszString2 te gebruiken voor de invoegtekenreeks in pszDescription.
LPSTR pszString1 = "c:\\testapp1.c";
LPSTR pszString2 = "c:\\testapp2.c";
LPSTR pszDescription = "Access denied. Attempted to open the file %1."