我跟随这篇 Create a Logger using the Trace Listener in C# 文章,相信只有 Trace.WriteLine() 语句会被写入 application.log 文件中:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <trace autoflush="true" indentsize="4">
      <listeners>
        <add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="application.log" />
        <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

但令我沮丧的是,我所有用于 Debug.WriteLine() 选项卡的 Output 都从该选项卡中消失了,而现在它们都转到了跟踪文件 application.log

有没有办法将 Trace.WriteLine() 语句定向到该 application.log

如果不是,那么将 WriteLine() 写入我自己的文件的最简单方法是什么,仅是我选择记录到该文件的内容,而不是我的整个调试 session ?

最佳答案

不确定当 <remove name="Default" /> 时您期望什么,但从配置中删除该行将使您返回输出选项卡中的输出。您可以看到 DefaultTraceListener 使用了 OutputDebugString 方法,该方法允许 VS 在输出选项卡中显示日志。

跟踪发送到所有监听器,监听器本身可以进行过滤。

如果您想对跟踪进行更多分类 - 请参阅 System.Diagnostic 命名空间中的其他类,例如 TraceSourceHow to - Trace Source 中的示例:

private static TraceSource mySource = new TraceSource("TraceSourceApp");
...
mySource.TraceEvent(TraceEventType.Error, 1, "Error message.");

关于c# - 使用跟踪监听器重定向所有调试输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13131602/

10-13 06:07