Riktlinjer för loggning
Händelseloggar lagrar poster för viktiga händelser för systemets och programmens räkning som körs i systemet. Eftersom loggningsfunktionerna är allmänna måste du bestämma vilken information som är lämplig att logga. I allmänhet bör du bara logga information som kan vara användbar för att diagnostisera ett maskinvaru- eller programvaruproblem. Händelseloggning är inte avsett att användas som spårningsverktyg.
Välja händelser att logga
Följande är exempel på fall där händelseloggning kan vara till hjälp:
- Resursproblem. Genom att logga en varningshändelse när minnesallokeringen misslyckas kan man hjälpa till att identifiera orsaken till en minnesbristsituation.
- Maskinvaruproblem. Om en enhetsdrivrutin stöter på en timeout för en diskstyrenhet, ett strömavbrott i en parallellport eller ett datafel från ett nätverks- eller seriekort kan enhetsdrivrutinen logga information om dessa händelser för att hjälpa systemadministratören att diagnostisera maskinvaruproblem.
- Dåliga sektorer. Om en diskdrivrutin stöter på en defekt sektor kan den kanske läsa från eller skriva till sektorn efter att ha försökt utföra åtgärden igen, men sektorn kommer att bli defekt så småningom. Om diskdrivrutinen kan fortsätta bör den logga en varningshändelse. annars bör den logga en felhändelse. Om en filsystemdrivrutin hittar ett stort antal felaktiga sektorer och åtgärdar dem kan loggning av varningshändelser hjälpa en administratör att avgöra att disken kan vara på väg att misslyckas.
- Informationsevenemang. Ett serverprogram (till exempel en databasserver) registrerar en användare som loggar in, öppnar en databas eller startar en filöverföring. Servern kan också logga andra händelser, till exempel fel (det går inte att komma åt filen, frånkopplad värdprocess osv.), skadade databaser eller om en filöverföring lyckades.
Skriva meddelanden
Meddelanden bör vara meningsfulla för administratörer och användare som försöker felsöka ett problem. Ett meddelande bör innehålla all information som behövs för att förstå vad som orsakade problemet och hur du korrigerar det.
Undvik att skriva ett kryptiskt meddelande, till exempel "Ett drivrutinspaket som togs emot från I/O-undersystemet var ogiltigt. Data är paketet." Ett bättre meddelande tyder på att drivrutinen i fråga fungerar korrekt, men loggar felaktigt formaterade paket. Det kan fortsätta med att säga att en Unicode-version av drivrutinen behövs för att åtgärda problemet. Mer information om hur du skriver bra felmeddelanden finns i Riktlinjer för felmeddelanden.
Använd inte flikar eller kommatecken i meddelandetexten eftersom händelseloggar kan sparas som komma- eller tabbavgränsade textfiler. Många organisationer importerar dessa filer till databaser, och de extra formateringstecken kräver manuell manipulering.
När du använder UNC-namn eller andra länkar som innehåller blanksteg, omge namnet med vinkelparenteser. Till exempel <\\sharename\servernamn>. Du kan skriva en URL till slutet av meddelandet som pekar användaren på relaterat hjälpmaterial. URL:en måste vara ett fullständigt kvalificerat DNS-värdnamn. Du kan till exempel lägga till följande text i dina meddelanden: "Mer information om det här meddelandet finns på vår supportwebbplats på https://www.microsoft.com/Support/ProdRedirect/ContentSearch.asp
." Länken skulle leda till en ASP-sida som omdirigerar användaren till innehåll som är relaterat till felmeddelandet. Det skulle parsa ytterligare parametrar (skickas när URL:en klickas) för att avgöra var användaren ska omdirigeras.
Argumenten som skickas till funktionen ReportEvent läggs till i URL:en enligt följande:
strHTTPQuery += L"?EvtSrc=" + _strEscapedSource;
strHTTPQuery += L"&EvtCat=" + _strEscapedCategory;
strHTTPQuery += L"&EvtID=" + _strEscapedEventID;
strHTTPQuery += L"&EvtCatID=" + _strEscapedCategoryID;
strHTTPQuery += L"&EvtType=" + _strEscapedType;
strHTTPQuery += L"&EvtTypeID=" + _strEscapedTypeID;
strHTTPQuery += L"&EvtRptTime=" + _strEscapedDateAndTime;
strHTTPQuery += L"&EvtTZBias=" + _strEscapedTimeZoneBias;
Om företagets namn, produktnamn, produktversion, filnamn och filversion från meddelandets DLL-huvud för händelsekällan är giltiga läggs de även till i URL:en:
ADD_VER_STR(L"CoName", _strEscapedCompanyName);
ADD_VER_STR(L"ProdName", _strEscapedProductName);
ADD_VER_STR(L"ProdVer", _strEscapedProductVersion);
ADD_VER_STR(L"FileName", _strEscapedFileName);
ADD_VER_STR(L"FileVer", _strEscapedFileVersion);
Minska omkostnaderna
Händelseloggning förbrukar resurser som diskutrymme och processortid. Mängden diskutrymme som en händelselogg kräver och omkostnaderna för ett program som loggar händelser beror på hur mycket information du väljer att logga. Därför är det viktigt att bara logga viktig information. Det är också bra att placera händelseloggningsanrop i en felväg i koden i stället för i huvudkodvägen, vilket skulle påverka prestandan.
Mängden diskutrymme som krävs för varje händelseloggpost inkluderar medlemmarna i EVENTLOGRECORD- struktur. Det här är en variabel längdstruktur. strängar och binära data lagras efter strukturen.