将跟踪侦听器附加到app.config中的现有跟踪源

时间:2012-09-25 17:00:14

标签: c# .net app-config tracelistener tracesource

我在代码中创建了一个具有特定名称的跟踪源,然后我想使用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>

1 个答案:

答案 0 :(得分: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>