Formát souboru protokolu událostí
Každý protokol událostí obsahuje hlavičku (reprezentovanou strukturou ELF_LOGFILE_HEADER), která má pevnou velikost, za kterou následuje proměnlivý počet záznamů událostí (reprezentovaný eventLOGRECORD struktur) a záznam konce souboru (reprezentovaný strukturou ELF_EOF_RECORD).
Struktura ELF_LOGFILE_HEADER a struktura ELF_EOF_RECORD se zapisují do protokolu událostí při vytvoření protokolu událostí a aktualizují se při každém zápisu události do protokolu.
Když aplikace zavolá funkci ReportEvent k zápisu položky do protokolu událostí, systém předá parametry službě protokolování událostí. Služba protokolování událostí používá informace k zápisu EVENTLOGRECORD struktury do protokolu událostí. Tento proces znázorňuje následující diagram.
Záznamy událostí jsou uspořádány jedním z následujících způsobů:
Nezabalit. Nejstarší záznam je bezprostředně po záhlaví protokolu událostí a nové záznamy se přidají po posledním přidaném záznamu (před ELF_EOF_RECORD). Následující příklad ukazuje metodu bez zabalení:
HEADER (ELF_LOGFILE_HEADER) EVENT RECORD 1 (EVENTLOGRECORD) EVENT RECORD 2 (EVENTLOGRECORD) EOF RECORD (ELF_EOF_RECORD)
K nezalamování může dojít při vytvoření protokolu událostí nebo při vymazání protokolu událostí. Dokud nedosáhnete limitu velikosti protokolu událostí, protokol událostí bude nadále neobtékání. Velikost protokolu událostí je omezená hodnotou konfigurace MaxSize nebo množstvím systémových prostředků.
Když dosáhnete limitu velikosti protokolu událostí, může se začít zalamovat. Zabalení je řízeno hodnotou konfigurace Uchovávání informací. Další informace o konfiguračních hodnotách protokolu událostí najdete v tématu klíč protokolu událostí.
Balení. Záznamy jsou uspořádány jako kruhová vyrovnávací paměť. Při přidávání nových záznamů se nejstarší záznamy nahradí. Umístění nejstarších a nejnovějších záznamů se bude lišit. Následující příklad ukazuje metodu wrapping.
HEADER (ELF_LOGFILE_HEADER) Part of EVENT RECORD 300 (EVENTLOGRECORD) EVENT RECORD 301 (EVENTLOGRECORD) . . . EVENT RECORD 400 (EVENTLOGRECORD) EOF RECORD (ELF_EOF_RECORD) Wasted space EVENT RECORD 102 (EVENTLOGRECORD) EVENT RECORD 103 (EVENTLOGRECORD) . . . EVENT RECORD 299 (EVENTLOGRECORD) Part of EVENT RECORD 300 (EVENTLOGRECORD)
V příkladu nejstarší záznam již není 1, ale je 102, protože místo pro záznamy 1 až 101 bylo přepsáno.
Mezi ELF_EOF_RECORD a nejstarším záznamem je určitou mezeru, protože systém vymaže celočíselný počet záznamů, aby uvolnil místo pro nejnovější záznam. Pokud je například nejnovější záznam dlouhý 100 bajtů a dva nejstarší záznamy mají délku 75 bajtů, systém odebere dva nejstarší záznamy. Dalších 50 bajtů se použije později při zápisu nových záznamů.
Soubor protokolu událostí má pevnou velikost a když se záznamy v zalamování souboru zalamují, záznam na konci souboru se obvykle rozdělí do dvou záznamů. Pokud je například pozice dalšího zápisu 100 bajtů od konce souboru a velikost záznamu je 300 bajtů, prvních 100 bajtů se zapíše na konci souboru a dalších 200 bajtů se zapíše na začátek souboru hned za ELF_LOGFILE_HEADER. Pokud je dostupné místo na konci souboru menší než pevná část EVENTLOGRECORD (0x38 bajty), všechny nové záznamy se zapíšou na začátku souboru hned za ELF_LOGFILE_HEADER. Nevyužité bajty na konci souboru budou vyplněny vzorem 0x00000027.
Další informace a příklad kódu najdete v tématu Generování sestav událostí.