Ablaufverfolgungslistener
Aktualisiert: November 2007
Wenn Sie mit Trace, Debug und TraceSource arbeiten, müssen Sie einen Mechanismus zum Sammeln und Aufzeichnen der gesendeten Meldungen einrichten. Ablaufverfolgungsmeldungen werden von Listenern empfangen. Der Zweck eines Listeners ist das Sammeln, Speichern und Weiterleiten von Ablaufverfolgungsmeldungen. Listener leiten die Ablaufverfolgungsausgabe an ein entsprechendes Ziel, beispielsweise ein Protokoll, ein Fenster oder eine Textdatei.
Listener stehen für die Klassen Debug, Trace und TraceSource zur Verfügung, die ihre Ausgabe jeweils an eine Vielzahl von Listenerobjekten senden können. Es gibt drei Typen von vordefinierten Listenern:
TextWriterTraceListener leitet die Ausgabe zu einer Instanz der TextWriter-Klasse oder einer beliebigen Stream-Klasse um. Er kann auch an die Konsole oder in eine Datei schreiben, denn dabei handelt es sich um Stream-Klassen.
EventLogTraceListener leitet die Ausgabe zu einem Ereignisprotokoll um.
DefaultTraceListener gibt Write- und WriteLine-Meldungen an die OutputDebugString-Methode und die Debugger.Log-Methode aus. In Visual Studio werden die Debugmeldungen infolgedessen im Ausgabefenster angezeigt. Auch Fail-Meldungen und fehlgeschlagene Assert-Meldungen bewirken eine Ausgabe an die OutputDebugString-Windows-API und die Debugger.Log-Methode. Außerdem wird ein Meldungsfeld angezeigt. Dies gilt standardmäßig für Debug-Meldungen und Trace-Meldungen, da DefaultTraceListener als einziger Listener automatisch in jede Listeners-Auflistung eingetragen wird.
ConsoleTraceListener leitet Ablaufverfolgungs- oder Debugausgaben entweder an die Standardausgabe oder an den Standardfehlerstream um.
DelimitedListTraceListener leitet Ablaufverfolgungs- oder Debugausgaben an einen Textwriter, z. B. einen Streamwriter, oder an einen Stream, z. B. einen Dateistream, um. Ablaufverfolgungsdaten werden in einem Textformat mit Trennzeichen ausgegeben, das durch die Delimiter-Eigenschaft festgelegt wird.
XmlWriterTraceListener leitet Ablaufverfolgungs- oder Debugausgaben als XML-codierte Daten an TextWriter oder Stream, z. B. FileStream, um.
Wenn neben DefaultTraceListener noch weitere Listener Debug-, Trace- und TraceSource-Ausgaben empfangen sollen, müssen diese zur Listeners-Auflistung hinzugefügt werden. Weitere Informationen finden Sie unter Gewusst wie: Erstellen und Initialisieren von Ablaufverfolgungslistenern und Gewusst wie: Verwenden von TraceSource und Filtern für Ablaufverfolgungslistener. Alle Listener in der Listeners-Auflistung empfangen die gleichen Meldungen von den Ausgabemethoden der Ablaufverfolgung. Angenommen, Sie richten zwei Listener ein, einen TextWriterTraceListener und einen EventLogTraceListener. Jeder Listener empfängt die gleiche Meldung. Der TextWriterTraceListener leitet seine Ausgabe zu einem Stream und der EventLogTraceListener zu einem Ereignisprotokoll weiter.
Im folgenden Beispiel wird gezeigt, wie Ausgabe an die Listeners-Auflistung gesendet wird.
' 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");
Debug und Trace nutzen eine gemeinsame Listeners-Auflistung, d. h., ein in eine Debug.Listeners-Auflistung in der Anwendung eingefügtes Listenerobjekt wird auch zur Trace.Listeners-Auflistung hinzugefügt.
Im folgenden Beispiel wird gezeigt, wie Ablaufverfolgungsdaten mithilfe eines Listeners an eine Konsole gesendet werden:
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()));
Entwicklerdefinierte Listener
Sie können eigene Listener definieren, indem Sie von der TraceListener-Basisklasse erben und ihre Methoden mit benutzerdefinierten Methoden überschreiben. Weitere Informationen zum Erstellen entwicklerdefinierter Listener finden Sie unter TraceListener in der Referenz zu .NET Framework.
Siehe auch
Konzepte
Einführung in Instrumentation und Ablaufverfolgung