【问题标题】:Using Trace Listener redirects ALL Debug Output使用跟踪侦听器重定向所有调试输出
【发布时间】:2012-10-19 08:32:58
【问题描述】:

我关注了这篇Create a Logger using the Trace Listener in C# 的文章,认为application.log 文件中只会写入Trace.WriteLine() 语句:

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

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

有没有办法将only Trace.WriteLine() 语句指向application.log

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

【问题讨论】:

  • 任何带有完整源代码示例的最终解决方案?

标签: c# winforms app-config tracelistener


【解决方案1】:

不确定您在 &lt;remove name="Default" /&gt; 时的预期,但从配置中删除该行将使您在“输出”选项卡中返回输出。可以看到DefaultTraceListener 使用了OutputDebugString 方法,允许VS 在Output 选项卡中显示日志。

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

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

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

【讨论】:

  • +1 用于发现 &lt;remove name="Default" /&gt;。将其注释掉确实恢复了“输出”选项卡。但我仍然在application.log 中看到所有输出。有没有办法让我将我想在那里记录的内容定向到application.log
  • @ateiob 行为是设计使然。引用MSDN “Debug 和 Trace 类共享相同的 Listeners 集合。如果您在其中一个类中向集合添加侦听器对象,则另一个类使用相同的侦听器。”跨度>
猜你喜欢
  • 2011-07-30
  • 2017-09-24
  • 1970-01-01
  • 2013-04-15
  • 2012-05-12
  • 1970-01-01
  • 2016-05-12
  • 2015-02-25
  • 1970-01-01
相关资源
最近更新 更多