共用方式為


關於 TraceLogging

TraceLogging 是記錄事件的系統,可在沒有指令清單的情況下譯碼。 在 Windows 上,TraceLogging 會同時用於使用者模式和核心模式元件,以產生 Windows 事件追蹤 事件。 TraceLogging 建置於 Windows 事件追蹤(ETW)之上,提供了一種簡化的方式來工具化代碼。

Windows 事件追蹤 (ETW) 已引進 Windows 2000,並在 Windows Vista 中更新。 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 Runtime (WinRT),Windows 10 中的 LoggingChannel 已擴展到記錄 TraceLogging 事件。
  • 否則,您可以使用社群支援的選項,例如 TraceLoggingDynamic

關於事件追蹤