トレース リスナ
更新 : 2007 年 11 月
Trace、Debug、および TraceSource を使用するときには、送信されたメッセージを収集して記録するための機構が必要です。トレース メッセージは "リスナ" によって受け取られます。リスナの目的は、トレース メッセージの収集、格納、およびルーティングを行うことです。リスナにより、トレース出力が適切な場所 (ログ、ウィンドウ、またはテキスト ファイル) に送られます。
リスナは、Debug、Trace、および TraceSource の各クラスで使用できます。どのクラスも出力を各種のリスナ オブジェクトに送ることができます。3 種類の定義済みのリスナがあります。
TextWriterTraceListener は、TextWriter クラスのインスタンスまたは Stream クラスの任意の対象に出力をリダイレクトします。これらは Stream のクラスのため、このリスナはコンソールまたはファイルにも書き込むことができます。
EventLogTraceListener は、出力をイベント ログにリダイレクトします。
DefaultTraceListener は、Write メッセージと WriteLine メッセージを OutputDebugString メソッドと Debugger.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 コレクションのすべてのリスナは、トレース出力のメソッドから同じメッセージを受け取ります。たとえば、TextWriterTraceListener および EventLogTraceListener という 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");
// 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));
System.Diagnostics.Trace.get_Listeners().Clear();
System.Diagnostics.Trace.get_Listeners().Add(
new System.Diagnostics.TextWriterTraceListener(Console.get_Out()));
開発者が定義するリスナ
TraceListener 基本クラスから継承することにより、独自のリスナを定義し、カスタマイズされたメソッドで既存のメソッドをオーバーライドできます。開発者が定義するリスナの作成については、「.NET Framework リファレンス」の「TraceListener」を参照してください。