關於 TraceLogging
TraceLogging 是記錄事件的系統,可在沒有資訊清單的情況下解碼。 在 Windows 上,TraceLogging 用於使用者模式和核心模式元件,以產生 Windows 事件追蹤 (ETW) 事件。 TraceLogging 建置在 Windows (ETW 的事件追蹤) 上,並提供簡化的方式來檢測程式碼。
Windows (ETW) 的事件追蹤是在 Windows Vista 中引進並更新 Windows 2000。 TraceLogging 建置在 Windows Vista ETW API 上。 提供者可以在 Windows Vista 或更新版本上執行時使用 TraceLogging。 現有的 ETW 追蹤控制器可用來控制 TraceLogging 提供者,並使用 Windows Vista API 擷取追蹤。 在 Windows 10 或更新版本上執行時,使用 TDH 解碼 API 的現有 ETW 追蹤解碼器可以解碼 TraceLogging 事件。
TraceLogging 提供數個優點:
- 直接在程式碼中定義事件的簡單性,類似于 WPP,但不需要前置處理工具。
- 結構化資料:具有類型的具名欄位、陣列和結構的支援。
- 透過 ETW 活動的事件相互關聯。
- 事件的所有解碼資訊都包含在事件本身內,因此不需要解碼其他檔案。
- TraceLogging 事件提供者 API 適用于 C/C++、 .NET和 Windows 執行時間 (WinRT) 。 適用于 Python、Rust 等的外部支援。
雖然 TraceLogging 提供數個優點,而且應該考慮用於新的追蹤,但資訊清單型 ETW 仍然適用于許多案例。
- 如果您的事件是以 Windows 事件記錄檔中的其中一個舊版 Windows 記錄為目標 (,例如系統或應用程式記錄檔) ,請繼續使用資訊清單型 ETW。
- 如果追蹤檔案大小是重要的考慮,請繼續使用以資訊清單為基礎的 ETW。 TraceLogging 事件包括事件字串 (提供者名稱、事件名稱和功能變數名稱) 在每個事件內,而且通常大於對等的資訊清單型事件。
- 如果您對現有的追蹤技術有大量投資,就不需要切換至 TraceLogging。
- 否則,請考慮使用 TraceLogging,因為它可為開發人員和事件取用者提供更簡單的體驗。
API 高階概觀
有多個 TraceLogging API,每個 API 都以不同的開發人員物件為目標。
- 如果您需要從 C 或 C++ 程式碼產生事件, TraceLoggingProvider.h 提供有效率的 API,可從使用者模式或核心模式程式碼產生 TraceLogging 事件。 事件必須在編譯時期定義。
- 否則,如果您需要從 .NET 程式碼產生事件,.NET EventSource 類別支援產生以資訊清單為基礎的和 TraceLogging 型 ETW 事件。 事件必須在編譯時期定義。
- 否則,如果您使用 Windows 執行時間 (WinRT) , 則 LoggingChannel 已在 Windows 10 中擴充以記錄 TraceLogging 事件。
- 否則,您可以使用社群支援的選項,例如 TraceLoggingDynamic。