重写System.Diagnostics.Trace.WriteLine以记录到文件

Ben*_*ndt 12 vb.net oop logging trace diagnostics

这可能更像是一个OOP概念问题,但这就是我想要做的.

我有一个应用程序,使用System.Diagnostics.Trace.WriteLine输出调试信息,以便可以使用DebugView查看它.

我想重写/扩展(不知道正确的术语)这个方法来记录文本文件代替,也许除了跟踪输出.这将允许我为我的应用程序编写一个新的WriteLine方法,并且我可以在应用程序的其余部分保持所有其他System.Diagnostics.Trace.WriteLine语句不变.

那么我将如何在VB.Net应用程序中更改此方法的行为?

Jon*_*eet 27

你绝对致力于仍然使用Trace吗?如果没有,我会使用功能更全面的日志系统,如Log4Net.

但是,如果您确实要使用,Trace则可以重新配置TraceListenerapp.config文件一起使用的s .在TraceListenerMSDN文档举个例子有点像这样:

<configuration>
  <system.diagnostics>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add name="fileLogger" 
             type="System.Diagnostics.TextWriterTraceListener" 
             initializeData="LogFile.log" />
        <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>
Run Code Online (Sandbox Code Playgroud)

TextWriterTraceListener将日志转储到给定文件.(还有其他选择.)

或者,您可以以编程方式执行此操作:

Trace.Listeners.Add(new TextWriterTraceListener("foo.log"));
Run Code Online (Sandbox Code Playgroud)

请注意,您可能需要在应用退出之前显式刷新跟踪,方法是:

Trace.Flush();
Run Code Online (Sandbox Code Playgroud)

或者更复杂:

foreach (TraceListener listener in Trace.Listeners)
{
    listener.Flush();
}
Run Code Online (Sandbox Code Playgroud)

(我只提到它,因为我必须在测试时!)

编辑:如评论中所述,如果你很高兴每次写入后都会刷新监听器(这样可以避免在最后刷新,但可能会损害性能),你可以设置Trace.AutoFlush为true(包括在XML中 - 参见autoflush属性) ).