事件記錄檔格式
每個事件記錄檔都包含具有固定大小的標頭(以 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。
包皮。 記錄會組織成循環緩衝區。 新增記錄時,會取代最舊的記錄。 最舊和最新記錄的位置會有所不同。 下列範例顯示 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)
在範例中,最舊的記錄不再是 1,而是 102,因為已覆寫記錄 1 到 101 的空間。
ELF_EOF_RECORD 與最舊記錄之間有一些空間,因為系統會清除整數的記錄,以釋放最新記錄的空間。 例如,如果最新的記錄長度為100個字節,且兩筆最舊的記錄長度為75位元組,則系統會移除兩筆最舊的記錄。 寫入新記錄時,稍後會使用額外的 50 個字節。
事件記錄檔具有固定大小,而且當檔案中的記錄換行時,檔案結尾的記錄通常會分割成兩筆記錄。 例如,如果下一個寫入的位置是從檔尾 100 個字節,而記錄的大小是 300 個字節,則會在檔尾寫入前 100 個字節,而下一個 200 個字節將會在檔案開頭緊接在 ELF_LOGFILE_HEADER之後寫入。 如果檔案結尾的可用空間小於 EVENTLOGRECORD 的固定部分(0x38 個字節),則所有新記錄都會在檔案開頭緊接在 ELF_LOGFILE_HEADER之後寫入。 檔案結尾的未使用位元組會填入模式0x00000027。
如需詳細資訊和程式代碼範例,請參閱 報告事件。