注释
本文特定于 .NET Framework。 它不适用于 .NET 的较新版本实现,包括 .NET 6 及更高版本。
使用 跟踪、 调试 和 TraceSource时,必须有一种机制来收集和记录发送的消息。 跟踪消息可由侦听器接收。 侦听器的目的是收集、存储和路由跟踪消息。 侦听器将跟踪输出定向到相应的目标,例如日志、窗口或文本文件。
侦听器可用于 调试、 跟踪和 TraceSource 类,每个侦听器都可以将其输出发送到各种侦听器对象。 下面是常用的预定义侦听器:
TextWriterTraceListener 将输出重定向到 TextWriter 类的实例或为 Stream 类的任何项。 它还可以写入控制台或文件,因为这些是 Stream 类。
EventLogTraceListener 将输出重定向到事件日志。
DefaultTraceListener 发出 Write 和 WriteLine 消息到 OutputDebugString 和 Debugger.Log 方法。 在 Visual Studio 中,这会导致调试消息显示在“输出”窗口中。 Fail 和失败的 Assert 消息也发到 OutputDebugString Windows API 和 Debugger.Log 方法,同样将显示消息框。 此行为是 调试 和 跟踪 消息的默认行为,因为 DefaultTraceListener 会自动包含在每个
Listeners
集合中,并且是自动包含的唯一侦听器。ConsoleTraceListener 将跟踪或调试输出定向到标准输出或标准错误流。
DelimitedListTraceListener 将跟踪或调试输出定向到文本编写器(如流编写器)或流(如文件流)。 跟踪输出采用带分隔符的文本格式,该格式使用属性指定的 Delimiter 分隔符。
XmlWriterTraceListener 将跟踪或调试输出以 XML 编码数据的形式定向到 TextWriter 或 Stream,例如 FileStream。
如果希望除了DefaultTraceListener之外的任何侦听器接收调试、跟踪和TraceSource输出,则必须将其添加到Listeners
集合中。 有关详细信息,请参阅 如何:创建和初始化跟踪侦听器 , 以及如何:将 TraceSource 和筛选器与跟踪侦听器配合使用。
侦听器集合中的任何侦听器从跟踪输出方法中获取相同的消息。 例如,假设设置了两个侦听器: TextWriterTraceListener 和 EventLogTraceListener。 每个听众接收到相同的信息。
TextWriterTraceListener 将输出定向到流,EventLogTraceListener 会将输出定向到事件日志。
以下示例演示如何将输出发送到 侦听器 集合。
' 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");
调试和跟踪共享相同的 侦听器 集合,因此,如果将侦听器对象添加到应用程序中的 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。