如何:创建和初始化跟踪侦听器
注意
本文特定于 .NET Framework。 它不适用于 .NET 的较新版本实现,包括 .NET 6 及更高版本。
System.Diagnostics.Debug 和 System.Diagnostics.Trace 类向接收和处理消息的对象(成为侦听器)中发送消息。 在启用跟踪或调试后将自动创建并初始化一个如上所述的侦听器 System.Diagnostics.DefaultTraceListener。 如果要将 Trace 或 Debug 输出定向到任何其他源,则必须创建并初始化其他跟踪侦听器。
所创建的侦听器应反映应用程序的需要。 例如,如果想要获取所有跟踪输出的文本记录,则创建 TextWriterTraceListener 侦听器;启用后,它会将所有输出都写入新的文本文件中。 另一方面,如果想要仅在应用程序执行过程中查看输出,则创建 ConsoleTraceListener 侦听器,以便将所有输出定向到控制台窗口。 EventLogTraceListener 可以将跟踪输出定向到事件日志。 有关详细信息,请参阅跟踪侦听器。
可以在应用程序配置文件或代码中创建跟踪侦听器。 我们建议使用应用程序配置文件,因为它们可在不更改代码的情况下添加、修改或删除跟踪侦听器。
若要使用配置文件创建和初始化跟踪侦听器
请声明应用程序配置文件中的跟踪侦听器。 如果创建的侦听器需要的任何其他对象,请同时对它们进行声明。 下面的示例演示如何创建名为
myListener
的侦听器,它将写入到文本文件TextWriterOutput.log
中。<configuration> <system.diagnostics> <trace autoflush="false" indentsize="4"> <listeners> <add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TextWriterOutput.log" /> <remove name="Default" /> </listeners> </trace> </system.diagnostics> </configuration>
在代码中使用 Trace 类以将消息写入到跟踪侦听器中。
Trace.TraceInformation("Test message.") ' You must close or flush the trace to empty the output buffer. Trace.Flush()
Trace.TraceInformation("Test message."); // You must close or flush the trace to empty the output buffer. Trace.Flush();
若要在代码中创建和使用跟踪侦听器
请将跟踪侦听器添加到 Listeners 集合并将跟踪信息发送到侦听器。
Trace.Listeners.Add(New TextWriterTraceListener("TextWriterOutput.log", "myListener")) Trace.TraceInformation("Test message.") ' You must close or flush the trace to empty the output buffer. Trace.Flush()
Trace.Listeners.Add(new TextWriterTraceListener("TextWriterOutput.log", "myListener")); Trace.TraceInformation("Test message."); // You must close or flush the trace to empty the output buffer. Trace.Flush();
- 或 -
如果不希望侦听器接收跟踪输出,则不要将其添加到 Listeners 集合。 可以通过调用侦听器自己的输出方法由独立于 Listeners 集合的侦听器发出输出。 下面的示例演示如何向不在 Listeners 集合中的侦听器写入代码行。
Dim myListener As New TextWriterTraceListener("TextWriterOutput.log", "myListener") myListener.WriteLine("Test message.") ' You must close or flush the trace listener to empty the output buffer. myListener.Flush()
TextWriterTraceListener myListener = new TextWriterTraceListener("TextWriterOutput.log", "myListener"); myListener.WriteLine("Test message."); // You must close or flush the trace listener to empty the output buffer. myListener.Flush();