vb.net - 覆盖 System.Diagnostics.Trace.WriteLine 以记录到文件

标签 vb.net oop logging trace diagnostics

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

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

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

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

最佳答案

您是否绝对致力于继续使用 Trace?如果没有,我会使用功能更齐全的日志系统,例如 Log4Net .

但是,如果您真的想使用 Trace那么你可以重新配置TraceListener s 与 app.config 一起使用文件。 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();
}

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

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

关于vb.net - 覆盖 System.Diagnostics.Trace.WriteLine 以记录到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/870634/

相关文章:

vb.net - 如何通过 vb.net 程序(自动)创建文件作为其他程序的输入?

c++ - 更新类变量或从成员变量调用类函数会产生运行时错误

c++ - 对象与实例的区别 : C++

Java Splunk 最佳日志记录格式

asp.net - SQL - 使用 Scope_Identity() 插入 - 获取记录 ID

.net - 当 ShowinTaskBar 为 false 时,窗口消失

MySQL 连接池计数

php - 尝试将 mysqli_real_escape_string 与 OOP 连接属性一起使用,但它发出警告

Symfony 2 : Injecting logger for specific channel/handler to services

ruby-on-rails-3 - 我可以在工作人员内部获取我的sidekiq工作人员的ID吗?