イベント ログ ファイルの形式
各イベント ログには、固定サイズのヘッダー ( 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 構成値またはシステム リソースの量によって制限されます。
イベント ログのサイズ制限に達すると、ラップが開始される可能性があります。 折り返しは、 保持の 構成値によって制御されます。 イベント ログの構成値の詳細については、「 Eventlog Key」を参照してください。
包装。 レコードは循環バッファーとして編成されます。 新しいレコードが追加されると、最も古いレコードが置き換えられます。 最も古いレコードと最新のレコードの場所は異なります。 次の例は、折り返しメソッドを示しています。
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 ではなく、レコード 1 から 101 のスペースが上書きされたため、102 です。
ELF_EOF_RECORDと最も古いレコードの間にはスペースが存在します。これは、最新のレコードの空き領域を空けるために、整数のレコード数が消去されるためです。 たとえば、最新のレコードの長さが 100 バイトで、最も古い 2 つのレコードの長さが 75 バイトの場合、システムは最も古い 2 つのレコードを削除します。 新しいレコードが書き込まれると、後で余分な 50 バイトが使用されます。
イベント ログ ファイルのサイズは固定されており、ファイル内のレコードが折り返されると、通常、ファイルの末尾にあるレコードは 2 つのレコードに分割されます。 たとえば、次の書き込みの位置がファイルの末尾から 100 バイトで、レコードのサイズが 300 バイトの場合、最初の 100 バイトはファイルの末尾に書き込まれ、次の 200 バイトは ELF_LOGFILE_HEADERの直後にファイルの先頭に書き込まれます。 ファイルの末尾にある使用可能な領域が EVENTLOGRECORD の固定部分 (0x38 バイト) より小さい場合、新しいレコードはすべて 、ELF_LOGFILE_HEADERの直後にファイルの先頭に書き込まれます。 ファイルの末尾にある未使用のバイトは、パターン 0x00000027で塗りつぶされます。
詳細とコード例については、「 イベントの報告」を参照してください。