關於 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 擷取追蹤。 使用 TDH 解碼 API 的現有 ETW 追蹤解碼器可以在Windows 10或更新版本上執行時解碼 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。