跟踪侦听器

更新:2007 年 11 月

使用 TraceDebugTraceSource 时,必须具有收集和记录所发送消息的机制。跟踪消息由 “侦听器”来接收。侦听器的用途是收集、存储和路由跟踪消息。侦听器会将跟踪输出定向到适当的目标,如日志、窗口或文本文件。

侦听器可用于 DebugTraceTraceSource 类,这两个类中的每一个都可以将其输出发送给各种侦听器对象。预定义的侦听器有三种类型:

  • TextWriterTraceListener 将输出重定向到 TextWriter 类的实例或任何 Stream 类。它还可以写入控制台或文件,因为这两者都是 Stream 类。

  • EventLogTraceListener 将输出重定向到事件日志。

  • DefaultTraceListenerOutputDebugStringDebugger.Log 方法发出 WriteWriteLine 消息。在 Visual Studio 中,这将使调试消息出现在“输出”窗口中。Fail 和失败的 Assert 消息也会向 OutputDebugString Windows API 和 Debugger.Log 方法发出,而且还会导致显示一个消息框。由于 DefaultTraceListener 会自动包含在每个 Listeners 集合中并且是唯一自动包含的侦听器,因此该行为是 DebugTrace 消息的默认行为。

  • ConsoleTraceListener 将跟踪或调试输出定向到标准输出或标准错误流。

  • DelimitedListTraceListener 将跟踪或调试输出定向到文本编写器(例如流编写器),或定向到流(例如文件流)。跟踪输出采用分隔文本格式(使用 Delimiter 属性指定的分隔符)。

  • XmlWriterTraceListener 将跟踪或调试输出作为 XML 编码数据定向到 TextWriterStream(例如 FileStream)。

如果您需要除 DefaultTraceListener 之外的任何侦听器来接收 DebugTraceTraceSource 输出,则必须将其添加到 Listeners 集合中。有关更多信息,请参见如何:创建和初始化跟踪侦听器如何:将 TraceSource 和筛选器与跟踪侦听器一起使用Listeners 集合中的任何侦听器都会从跟踪输出方法中获取相同的消息。例如,如果您设置了两个侦听器:一个 TextWriterTraceListener 侦听器和一个 EventLogTraceListener 侦听器。每个侦听器都接收相同的消息。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

请参见

概念

检测和跟踪的介绍

跟踪开关

参考

TextWriterTraceListener

EventLogTraceListener

DefaultTraceListener

TraceListener

其他资源

跟踪应用程序和在应用程序中插入检测点