【问题标题】:Overriding System.Diagnostics.Trace.WriteLine to log to a file覆盖 System.Diagnostics.Trace.WriteLine 以记录到文件
【发布时间】:2010-10-26 14:50:41
【问题描述】:

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

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

我想覆盖/扩展(不确定正确的术语)此方法以将文本记录到文件中,或者可能除了跟踪输出之外。这将允许我为我的应用程序编写一个新的 WriteLine 方法,并且我可以在整个应用程序的其余部分中保持所有其他 System.Diagnostics.Trace.WriteLine 语句不变。

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

【问题讨论】:

  • 任何最终解决方案?有2个答案,不接受...

标签: vb.net oop logging trace diagnostics


【解决方案1】:

您是否仍然坚持使用 Trace?如果没有,我会使用功能更全面的日志系统,例如Log4Net

但是,如果您真的想使用Trace,那么您可以重新配置与app.config 文件一起使用的TraceListeners。 TraceListener MSDN docs 举了一个有点像这样的例子:

<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>

TextWriterTraceListener 会将日志转储到给定文件。 (还有其他可用选项。)

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

Trace.Listeners.Add(new TextWriterTraceListener("foo.log"));

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

Trace.Flush();

或更复杂的:

foreach (TraceListener listener in Trace.Listeners)
{
    listener.Flush();
}

(我只提到它是因为我在测试时必须这样做!)

编辑:如 cmets 中所述,如果您对在 每次 写入后刷新侦听器感到高兴(这样可以避免在最后刷新,但可能会损害性能),您可以设置 @ 987654324@ 为 true(包括在 XML 中 - 请参阅 autoflush 属性)。

【讨论】:

  • 监听器+Flush的迭代不就相当于调用静态方法Trace.Flush()吗?另外,您知道客户端应用程序如何确保正确处理侦听器吗?
  • 您对 Trace.Flush 的看法可能是对的 - 不确定。至于监听器的处置——我希望监听器不需要被处置来写入他们的数据。
  • 是的,Trace.Flush 完成了所需的业务。适当编辑答案。
  • 是的,如果处理它们是客户的责任,我只是在徘徊。我正在尝试编写一个自定义侦听器,但有些点还不清楚(例如 dispose 永远不会被调用)。
  • 我会尝试编写侦听器以使其无关紧要-我认为您很可能不会被处置。尽量不要依赖最终确定。这让生活变得更加艰难,但我们开始了:(您可能能够监听应用程序终止(或 AppDomain 卸载)事件并释放资源 - 但您应该确保您的监听器在它之后被调用时不会死自己处置!
【解决方案2】:

您可以配置一个 TextWriterTraceListener 以将跟踪日志输出到文件。可以在 MSDN 上找到配置信息:

http://msdn.microsoft.com/en-us/library/system.diagnostics.textwritertracelistener(VS.80).aspx

您还可以转储到事件日志或各种其他位置以获取内置跟踪侦听器列表,您可以在此处查看:

http://msdn.microsoft.com/en-us/library/4y5y10s7(VS.80).aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多