Format pliku dziennika zdarzeń
Każdy dziennik zdarzeń zawiera nagłówek (reprezentowany przez strukturę ELF_LOGFILE_HEADER), który ma stały rozmiar, a następnie zmienną liczbę rekordów zdarzeń (reprezentowanych przez EVENTLOGRECORD struktur) oraz rekord końca pliku (reprezentowany przez strukturę ELF_EOF_RECORD).
Struktura ELF_LOGFILE_HEADER i struktura ELF_EOF_RECORD są zapisywane w dzienniku zdarzeń podczas tworzenia dziennika zdarzeń i są aktualizowane za każdym razem, gdy zdarzenie jest zapisywane w dzienniku.
Gdy aplikacja wywołuje funkcję ReportEvent w celu zapisania wpisu w dzienniku zdarzeń, system przekazuje parametry do usługi rejestrowania zdarzeń. Usługa rejestrowania zdarzeń używa informacji do zapisywania struktury EVENTLOGRECORD w dzienniku zdarzeń. Na poniższym diagramie przedstawiono ten proces.
Rekordy zdarzeń są zorganizowane w jeden z następujących sposobów:
Bez zawijania. Najstarszy rekord jest natychmiast po nagłówku dziennika zdarzeń, a nowe rekordy są dodawane po ostatnim rekordzie, który został dodany (przed ELF_EOF_RECORD). W poniższym przykładzie przedstawiono metodę bez zawijania:
HEADER (ELF_LOGFILE_HEADER) EVENT RECORD 1 (EVENTLOGRECORD) EVENT RECORD 2 (EVENTLOGRECORD) EOF RECORD (ELF_EOF_RECORD)
Po utworzeniu dziennika zdarzeń lub wyczyszczonego dziennika zdarzeń może wystąpić niezaopakowujące. Dziennik zdarzeń nadal nie opakowuje się do momentu osiągnięcia limitu rozmiaru dziennika zdarzeń. Rozmiar dziennika zdarzeń jest ograniczony przez wartość konfiguracji MaxSize lub ilość zasobów systemowych.
Po osiągnięciu limitu rozmiaru dziennika zdarzeń może rozpocząć zawijanie. Zawijanie jest kontrolowane przez wartość konfiguracji Retention. Aby uzyskać więcej informacji na temat wartości konfiguracji dziennika zdarzeń, zobacz Eventlog Key.
Zawijania. Rekordy są zorganizowane jako bufor okrągły. W miarę dodawania nowych rekordów najstarsze rekordy są zastępowane. Lokalizacja najstarszych i najnowszych rekordów będzie się różnić. W poniższym przykładzie przedstawiono metodę opakowującego.
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)
W tym przykładzie najstarszy rekord nie jest już 1, ale jest 102, ponieważ miejsce dla rekordów od 1 do 101 zostało zastąpione.
Istnieje pewne miejsce między ELF_EOF_RECORD a najstarszym rekordem, ponieważ system wymazuje całkowitą liczbę rekordów, aby zwolnić miejsce dla najnowszego rekordu. Jeśli na przykład najnowszy rekord ma długość 100 bajtów, a dwa najstarsze rekordy mają długość 75 bajtów, system usunie dwa najstarsze rekordy. Dodatkowe 50 bajtów będzie używane później po zapisaniu nowych rekordów.
Plik dziennika zdarzeń ma stały rozmiar i gdy rekordy w pliku są zawijane, rekord na końcu pliku będzie zwykle podzielony na dwa rekordy. Jeśli na przykład pozycja następnego zapisu wynosi 100 bajtów od końca pliku, a rozmiar rekordu to 300 bajtów, pierwsze 100 bajtów zostanie zapisanych na końcu pliku, a następne 200 bajtów zostanie zapisanych na początku pliku natychmiast po ELF_LOGFILE_HEADER. Jeśli dostępne miejsce na końcu pliku jest mniejsze niż stała część EVENTLOGRECORD (0x38 bajtów), wszystkie nowe rekordy zostaną zapisane na początku pliku bezpośrednio po ELF_LOGFILE_HEADER. Nieużywane bajty na końcu pliku zostaną wypełnione wzorcem 0x00000027.
Aby uzyskać więcej informacji i przykład kodu, zobacz Raportowanie zdarzenia.