TraceLogging について

TraceLogging は、マニフェストなしでデコードできるイベントをログに記録するためのシステムです。 Windows では、TraceLogging は、Windows イベント トレーシング (ETW) イベント を生成するために、ユーザー モードコンポーネントとカーネルモード コンポーネントの両方で使用されます。 TraceLogging は、Windows イベント トレーシング (ETW) に基づいており、コードをインストルメント化する簡単な方法を提供します。

Windows イベント トレーシング (ETW) は Windows 2000 で導入され、Windows Vista で更新されました。 トレース ログは、Windows Vista ETW API 上に構築されています。 プロバイダーは、Windows Vista 以降で実行するときにトレース ログを使用できます。 既存の ETW トレース コントローラーを使用して、トレース ログ プロバイダーを制御し、Windows Vista API を使用してトレースをキャプチャできます。 TDH デコード API を使用する既存の ETW トレース デコーダーは、Windows 10 以降で実行するときに TraceLogging イベントをデコードできます。

トレース ログには、いくつかの利点があります。

  • WPP と同様に、前処理ツールを必要とせずに、コード内でイベントを直接定義する簡単さ。
  • 構造化データ: 型を持つ名前付きフィールド、配列と構造体のサポート。
  • ETW アクティビティによるイベントの関連付け。
  • イベントのデコード情報はすべてイベント自体に含まれているため、デコードに追加のファイルは必要ありません。
  • トレース ログ イベント プロバイダー API は、C/C++.NETWindows ランタイム (WinRT) で使用できます。 Python、Rust などの外部サポートを利用できます。

TraceLogging にはいくつかの利点があり、新しいトレースでは考慮する必要があります。ただし、マニフェスト ベースの ETW は多くのシナリオに適しています。

  • イベントが Windows イベント ログ (システム ログやアプリケーション ログなど) のレガシ Windows ログの 1 つを対象としている場合は、マニフェスト ベースの ETW を引き続き使用します。
  • トレース ファイルのサイズが重要な考慮事項である場合は、マニフェスト ベースの ETW を引き続き使用してください。 TraceLogging イベントには、各イベント内のイベント文字列 (プロバイダー名、イベント名、フィールド名) が含まれており、通常は同等のマニフェスト ベースのイベントよりも大きくなります。
  • 既存のトレース テクノロジに大きな投資がある場合は、TraceLogging に切り替える必要はありません。
  • それ以外の場合は、開発者とイベント コンシューマーにとってより簡単なエクスペリエンスが提供されるため、TraceLogging の使用を検討してください。

API の概要

複数の TraceLogging API があり、それぞれが異なる開発者対象ユーザーを対象としています。

  • C または C++ コードからイベントを生成する必要がある場合、 TraceLoggingProvider.h には、ユーザー モードまたはカーネル モードのコードから TraceLogging イベントを生成するための効率的な API が用意されています。 イベントはコンパイル時に定義する必要があります。
  • それ以外の場合、.NET コードからイベントを生成する必要がある場合、.NET EventSource クラスはマニフェスト ベースと TraceLogging ベースの ETW イベントの両方の生成をサポートします。 イベントはコンパイル時に定義する必要があります。
  • それ以外の場合は、Windows ランタイム (WinRT) を使用している場合、トレース ログ イベントをログに記録するために LoggingChannel がWindows 10で拡張されています。
  • そうしないと、 TraceLoggingDynamic などのコミュニティでサポートされているオプションを使用できる場合があります。

イベント トレースについて