1

我在我的代码中创建了一个具有特定名称的跟踪源,然后我想使用 app.config 中的部分在运行时将侦听器附加到它。

这是我的 app.config:

  <system.diagnostics>
    <trace autoflush="true"/>
    <sources>
      <source name="myTraceSource"
              switchName="mySwitch"
              switchType="System.Diagnostics.SourceSwitch" >
        <listeners>
          <clear/>
          <add name="textwriterListener"
            type="System.Diagnostics.TextWriterTraceListener"
            initializeData="c:\dev\mylog.txt"
            traceOutputOptions="ProcessId, DateTime, Callstack" />
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="mySwitch" value="Verbose" />
    </switches>
  </system.diagnostics>

我可以看到代码中正在生成消息

this.TraceSource.TraceEvent(TraceEventType.Verbose, 0, p_message);

但日志文件中没有任何内容(甚至没有创建)。当我设置断点并查看时this.TraceSource.Listeners,它是空的。

知道我在这里做错了什么,或者关于调试这类事情的任何提示吗?甚至可以将新的侦听器附加到这样的现有源吗?

我也尝试了以下但没有成功:

 <system.diagnostics>
   <trace autoflush="true" indentsize="4">
     <listeners>
       <add name="TextListener" 
           type="System.Diagnostics.TextWriterTraceListener"
           initializeData="c:\dev\mylog.txt" />
       <remove name="Default" />
     </listeners>
   </trace>
 </system.diagnostics>
4

1 回答 1

4

我看到的一种可能性是您在配置文件中指定的目录是否不存在。也就是说,您没有显示如何初始化 TraceSource 实例,因此我不确定它与此无关。在任何情况下,使用配置部分的简单控制台应用程序都可以正常工作。

class Program
{
    static TraceSource ts = new TraceSource("myTraceSource");

    static void Main(string[] args)
    {
        ts.TraceEvent(TraceEventType.Verbose, 0, "Hello");
    }
}

另外,请确保您的 app.config 是完整的。我假设您只发布了 System.Diagnostics 部分,但这是完整的示例:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <trace autoflush="true"/>
    <sources>
      <source name="myTraceSource"
              switchName="mySwitch"
              switchType="System.Diagnostics.SourceSwitch" >
        <listeners>
          <clear/>
          <add name="textwriterListener"
            type="System.Diagnostics.TextWriterTraceListener"
            initializeData="c:\dev\mylog.txt"
            traceOutputOptions="ProcessId, DateTime, Callstack" />
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="mySwitch" value="Verbose" />
    </switches>
  </system.diagnostics>
</configuration>
于 2012-09-25T17:49:17.540 回答