次の方法で共有


トレース リスナー

Note

この記事は .NET Framework に固有のものです。 .NET 6 以降のバージョンを含め、.NET の新しい実装には適用されません。

TraceDebug、および TraceSource を使用するときには、送信されたメッセージを収集して記録するための機構が必要です。 トレース メッセージはリスナーによって受け取られます。 リスナーの目的は、トレース メッセージの収集、格納、およびルーティングを行うことです。 リスナーにより、トレース出力が適切な場所 (ログ、ウィンドウ、またはテキスト ファイル) に送られます。

リスナーは、DebugTrace、および TraceSource の各クラスで使用できます。それらのクラスからも出力を各種のリスナー オブジェクトに送ることができます。 一般的に使用される定義済みのリスナーは、次のとおりです。

  • TextWriterTraceListener は、TextWriter クラスのインスタンスまたは Stream クラスの任意の対象に出力をリダイレクトします。 また、コンソールまたはファイルに書き込むこともできます (これらは Stream クラスなので)。

  • EventLogTraceListener は、出力をイベント ログにリダイレクトします。

  • DefaultTraceListener は、Write メッセージと WriteLine メッセージを OutputDebugStringDebugger.Log メソッドに出力します。 Visual Studio では、これによってデバッグ メッセージが [出力] ウィンドウに表示されます。 Fail メッセージと、失敗した Assert メッセージも OutputDebugString Windows API と Debugger.Log メソッドに出力され、これらはメッセージ ボックスとしても表示されます。 DefaultTraceListener はすべての Listeners コレクションに自動的に取り込まれる唯一のリスナーであるため、この動作は Debug メッセージと Trace メッセージの既定の動作になります。

  • ConsoleTraceListener は、トレース出力またはデバッグ出力を、標準出力と標準エラー出力ストリームのいずれかに転送します。

  • DelimitedListTraceListener は、トレース出力またはデバッグ出力を、テキスト ライター (ストリーム ライターなど) またはストリーム (ファイル ストリームなど) に送ります。 トレース出力は、Delimiter プロパティによって指定された区切り記号を使用する、区切られたテキスト形式です。

  • XmlWriterTraceListener は、トレース出力またはデバッグ出力を、XML でエンコードされたデータとして TextWriter または Stream (FileStream など) に送ります。

DefaultTraceListener 以外のリスナーが Debug 出力、Trace 出力、および TraceSource 出力を受け取るようにする場合は、目的のリスナーを Listeners コレクションに追加する必要があります。 詳細については、「方法 : トレース リスナーを作成し初期化する」と「方法 : TraceSource とフィルターをトレース リスナーと共に使用する」を参照してください。 Listeners コレクションのすべてのリスナーは、トレース出力のメソッドから同じメッセージを受け取ります。 たとえば、TextWriterTraceListenerEventLogTraceListener という 2 つのリスナーを設定したとします。 各リスナーは同一のメッセージを受け取ります。 この場合、TextWriterTraceListener はストリームに出力を送り、EventLogTraceListener はイベント ログに出力を送るなどの動作が可能です。

出力を Listeners コレクションに送る方法を次の例に示します。

' Use this example when debugging.
Debug.WriteLine("Error in Widget 42")
' Use this example when tracing.
Trace.WriteLine("Error in Widget 42")
// Use this example when debugging.
System.Diagnostics.Debug.WriteLine("Error in Widget 42");
// Use this example when tracing.
System.Diagnostics.Trace.WriteLine("Error in Widget 42");

デバッグとトレースは、同じ Listeners コレクションを共有しています。したがって、リスナー オブジェクトをアプリケーションの Debug.Listeners コレクションに追加した場合、そのリスナー オブジェクトは Trace.Listeners コレクションにも追加されます。

トレース情報をコンソールに送る場合のリスナーの使用方法を次の例に示します。

Trace.Listeners.Clear()
Trace.Listeners.Add(New TextWriterTraceListener(Console.Out))
System.Diagnostics.Trace.Listeners.Clear();
System.Diagnostics.Trace.Listeners.Add(
   new System.Diagnostics.TextWriterTraceListener(Console.Out));

開発者が定義するリスナー

TraceListener 基底クラスから継承することにより、独自のリスナーを定義し、カスタマイズされたメソッドで既存のメソッドをオーバーライドできます。 開発者が定義するリスナーの作成については、「.NET Framework リファレンス」の「TraceListener」を参照してください。

関連項目