Formato di file del registro eventi

Ogni registro eventi contiene un'intestazione (rappresentata dalla struttura ELF_LOGFILE_HEADER ) con una dimensione fissa, seguita da un numero variabile di record eventi (rappresentati dalle strutture EVENTLOGRECORD ) e un record di fine file (rappresentato dalla struttura ELF_EOF_RECORD ).

La struttura ELF_LOGFILE_HEADER e la struttura ELF_EOF_RECORD vengono scritte nel registro eventi quando viene creato il registro eventi e vengono aggiornate ogni volta che viene scritto un evento nel log.

Quando un'applicazione chiama la funzione ReportEvent per scrivere una voce nel registro eventi, il sistema passa i parametri al servizio di registrazione eventi. Il servizio di registrazione eventi usa le informazioni per scrivere una struttura EVENTLOGRECORD nel registro eventi. La figura seguente illustra questo processo.

scrittura di un file di log

I record dell'evento sono organizzati in uno dei modi seguenti:

  • Non ritorno a capo. Il record meno recente viene aggiunto immediatamente dopo l'intestazione del registro eventi e i nuovi record vengono aggiunti dopo l'ultimo record aggiunto (prima del ELF_EOF_RECORD). Nell'esempio seguente viene illustrato il metodo di non wrapping:

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

    Il wrapping non può verificarsi quando viene creato il registro eventi o quando il registro eventi viene cancellato. Il registro eventi continua a non eseguire il wrapping finché non viene raggiunto il limite di dimensioni del registro eventi. Le dimensioni del registro eventi sono limitate dal valore di configurazione MaxSize o dalla quantità di risorse di sistema.

    Quando viene raggiunto il limite di dimensioni del registro eventi, potrebbe iniziare il wrapping. Il wrapping è controllato dal valore di configurazione conservazione . Per altre informazioni sui valori di configurazione del registro eventi, vedere Chiave del log eventi.

  • Avvolgimento. I record sono organizzati come buffer circolare. Man mano che vengono aggiunti nuovi record, i record meno recenti vengono sostituiti. La posizione dei record meno recenti e più recenti varia. Nell'esempio seguente viene illustrato il metodo di 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)
    

    Nell'esempio il record meno recente non è più 1, ma è 102 perché lo spazio per i record da 1 a 101 è stato sovrascritto.

    C'è uno spazio tra il ELF_EOF_RECORD e il record meno recente perché il sistema cancellerà un numero integrale di record per liberare spazio per il record più recente. Ad esempio, se il record più recente è lungo 100 byte e i due record meno recenti sono lunghi 75 byte, il sistema rimuoverà i due record meno recenti. I 50 byte aggiuntivi verranno usati in un secondo momento quando vengono scritti nuovi record.

    Un file di registro eventi ha una dimensione fissa e, quando i record nel file vengono a capo automatico, il record alla fine del file verrà in genere suddiviso in due record. Ad esempio, se la posizione per la scrittura successiva è di 100 byte dalla fine del file e la dimensione del record è di 300 byte, i primi 100 byte verranno scritti alla fine del file e i successivi 200 byte verranno scritti all'inizio del file immediatamente dopo il ELF_LOGFILE_HEADER. Se lo spazio disponibile alla fine del file è minore della parte fissa di EVENTLOGRECORD (0x38 byte), tutto il nuovo record verrà scritto all'inizio del file immediatamente dopo il ELF_LOGFILE_HEADER. I byte inutilizzati alla fine del file verranno riempiti con il criterio 0x00000027.

Per altre informazioni e un esempio di codice, vedere Creazione di report di un evento.