Формат файла журнала событий
Каждый журнал событий содержит заголовок (представленный структурой ELF_LOGFILE_HEADER), который имеет фиксированный размер, за которым следует переменное число записей событий (представленных структурами EVENTLOGRECORD), а также запись конца файла (представленная структурой ELF_EOF_RECORD).
Структура ELF_LOGFILE_HEADER и структура ELF_EOF_RECORD записываются в журнал событий при создании журнала событий и обновляются каждый раз, когда событие записывается в журнал.
Когда приложение вызывает функцию ReportEvent для записи записи записи в журнал событий, система передает параметры службе ведения журнала событий. Служба ведения журнала событий использует сведения для записи структуры EVENTLOGRECORD в журнал событий. На следующей схеме показан этот процесс.
Записи событий организованы одним из следующих способов:
Не упаковывание. Старейшая запись сразу после заголовка журнала событий и новых записей добавляются после последней записи, которая была добавлена (до ELF_EOF_RECORD). В следующем примере показан метод без упаковки:
HEADER (ELF_LOGFILE_HEADER) EVENT RECORD 1 (EVENTLOGRECORD) EVENT RECORD 2 (EVENTLOGRECORD) EOF RECORD (ELF_EOF_RECORD)
При создании журнала событий или очистке журнала событий может произойти неконвертирование. Журнал событий по-прежнему не упаковывается до достижения ограничения размера журнала событий. Размер журнала событий ограничен значением конфигурации MaxSize или объемом системных ресурсов.
По достижении предельного размера журнала событий может начаться оболочка. Оболочка управляется значением конфигурации хранения. Дополнительные сведения о значениях конфигурации журнала событий см. в разделе Ключ журнала событий.
Упаковка. Записи упорядочены в виде кругового буфера. По мере добавления новых записей старые записи заменяются. Расположение самых старых и новейших записей будет отличаться. В следующем примере показан метод упаковки.
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)
В примере старейшая запись больше не 1, но имеет значение 102, так как пространство для записей 1–101 было перезаписано.
Существует некоторое пространство между ELF_EOF_RECORD и самой старой записью, потому что система стирает целое число записей, чтобы освободить место для последней записи. Например, если последняя запись имеет длину 100 байтов, а две самые старые записи имеют длину 75 байтов, система удаляет две старые записи. Дополнительные 50 байт будут использоваться позже при записи новых записей.
Файл журнала событий имеет фиксированный размер и когда записи в оболочке файла, запись в конце файла обычно будет разделена на две записи. Например, если позиция следующей записи составляет 100 байт с конца файла, а размер записи составляет 300 байт, первые 100 байт будут записаны в конце файла, а следующие 200 байт будут записаны в начале файла сразу после ELF_LOGFILE_HEADER. Если доступное пространство в конце файла меньше фиксированной части EVENTLOGRECORD (0x38 байт), все новые записи записываются сразу после ELF_LOGFILE_HEADER. Неиспользуемые байты в конце файла будут заполнены шаблоном 0x00000027.
Дополнительные сведения и пример кода см. в разделе создания отчетов о событии.