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

C# 将跟踪侦听器附加到app.config中的现有跟踪源,c#,.net,app-config,tracelistener,tracesource,C#,.net,App Config,Tracelistener,Tracesource,我在代码中创建了一个具有特定名称的跟踪源,然后我想在运行时使用app.config中的部分将侦听器附加到它 这是我的app.config: <system.diagnostics> <trace autoflush="true"/> <sources> <source name="myTraceSource" switchName="mySwitch" switchT

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

我看到的一种可能性是,您在配置文件中指定的目录不存在。也就是说,您没有显示如何初始化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>

我看到的一种可能性是,您在配置文件中指定的目录不存在。也就是说,您没有显示如何初始化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>


Haha,原来我是个白痴,在程序启动的某个地方有一行
TraceSource.Listeners.Clear()
删除了我在配置文件中添加的所有侦听器。它现在可以工作了,我将继续接受这个问题的答案。哈哈,原来我是个白痴,在程序启动的某个地方有一行
TraceSource.Listeners.Clear()
,它删除了我在配置文件中添加的所有侦听器。它现在起作用了,我将继续接受这个问题的答案。