Formato do arquivo de log de eventos

Cada log de eventos contém um cabeçalho (representado pela estrutura ELF_LOGFILE_HEADER ) que tem um tamanho fixo, seguido por um número variável de registros de eventos (representado por estruturas EVENTLOGRECORD ) e um registro de fim de arquivo (representado pela estrutura ELF_EOF_RECORD ).

A estrutura ELF_LOGFILE_HEADER e a estrutura ELF_EOF_RECORD são gravadas no log de eventos quando o log de eventos é criado e são atualizados sempre que um evento é gravado no log.

Quando um aplicativo chama a função ReportEvent para gravar uma entrada no log de eventos, o sistema passa os parâmetros para o serviço de log de eventos. O serviço de log de eventos usa as informações para gravar uma estrutura EVENTLOGRECORD no log de eventos. O diagrama a seguir ilustra esse processo.

gravando um arquivo de log

Os registros de eventos são organizados de uma das seguintes maneiras:

  • Não encapsulamento. O registro mais antigo é imediatamente após o cabeçalho do log de eventos e novos registros são adicionados após o último registro que foi adicionado (antes do ELF_EOF_RECORD). O exemplo a seguir mostra o método sem encapsulamento:

    HEADER                   (ELF_LOGFILE_HEADER)
    EVENT RECORD 1           (EVENTLOGRECORD)
    EVENT RECORD 2           (EVENTLOGRECORD)
    EOF RECORD               (ELF_EOF_RECORD)
    

    O não encapsulamento pode ocorrer quando o log de eventos é criado ou quando o log de eventos é limpo. O log de eventos continua sem encapsulamento até que o limite de tamanho do log de eventos seja atingido. O tamanho do log de eventos é limitado pelo valor de configuração MaxSize ou pela quantidade de recursos do sistema.

    Quando o limite de tamanho do log de eventos é atingido, ele pode começar a encapsular. O encapsulamento é controlado pelo valor de configuração de retenção . Para obter mais informações sobre os valores de configuração do log de eventos, consulte Eventlog Key.

  • Envolvimento. Os registros são organizados como um buffer circular. À medida que novos registros são adicionados, os registros mais antigos são substituídos. O local dos registros mais antigos e mais recentes variará. O exemplo a seguir mostra o método de encapsulamento.

    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)
    

    No exemplo, o registro mais antigo não é mais 1, mas é 102 porque o espaço para registros de 1 a 101 foi substituído.

    Há algum espaço entre o ELF_EOF_RECORD e o registro mais antigo porque o sistema apagará um número integral de registros para liberar espaço para o registro mais recente. Por exemplo, se o registro mais recente tiver 100 bytes de comprimento e os dois registros mais antigos tiverem 75 bytes de comprimento, o sistema removerá os dois registros mais antigos. Os 50 bytes extras serão usados posteriormente quando novos registros forem gravados.

    Um arquivo de log de eventos tem um tamanho fixo e, quando os registros no arquivo são encapsulados, o registro no final do arquivo normalmente será dividido em dois registros. Por exemplo, se a posição para a próxima gravação for de 100 bytes do final do arquivo e o tamanho do registro for de 300 bytes, os primeiros 100 bytes serão gravados no final do arquivo e os próximos 200 bytes serão gravados no início do arquivo imediatamente após o ELF_LOGFILE_HEADER. Se o espaço disponível no final do arquivo for menor que a parte fixa do EVENTLOGRECORD (0x38 bytes), todo o novo registro será gravado no início do arquivo imediatamente após o ELF_LOGFILE_HEADER. Os bytes não utilizados no final do arquivo serão preenchidos com o padrão 0x00000027.

Para obter mais informações e um exemplo de código, consulte Relatando um evento.