2012-09-25 38 views
0

我已經在具有特定名稱的代碼中創建了跟蹤源,然後我想使用app.config中的部分在運行時將偵聽器附加到它。將跟蹤偵聽器附加到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> 
+0

哈哈,所以原來我是個白癡,有一個'TraceSource.Listeners.Clear()'行中的某處程序啓動,它刪除了我在配置文件中添加的任何監聽器。它現在起作用了,我會繼續並接受這個問題的答案。 – WildCrustacean

回答

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>