使用跟踪侦听器重定向所有调试输出

ate*_*iob 3 c# app-config winforms tracelistener

在C# 文章中使用Trace Listener跟踪了这个创建记录器,并相信只会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>
Run Code Online (Sandbox Code Playgroud)

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

有没有办法只指导 Trace.WriteLine()陈述application.log

如果没有,WriteLine()对于我自己的文件最简单的方法是什么,我只选择登录到该文件,而不是我的整个调试会话?

Ale*_*kov 5

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

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

如果要对跟踪进行更多分类 - 请参阅System.Diagnostic命名空间中的其他类,如TraceSource,其中的示例如何 - 跟踪源:

private static TraceSource mySource = new TraceSource("TraceSourceApp");
...
mySource.TraceEvent(TraceEventType.Error, 1, "Error message.");
Run Code Online (Sandbox Code Playgroud)