2013-10-03 140 views
5

我支持一個大型的舊應用程序。該代碼使用NLog以及Debug.WriteLineTrace.WriteLine。我試圖將Debug.WriteLine和Trace.WriteLine重定向到Nlog文件。這樣一切都在一個地方。目前,有些位於輸出窗口,另一些位於日誌文件中。如何將System.Diagnostics.Trace和System.Diagnostics.Debug消息記錄到NLog文件?

I followed this article to use the NLogTraceListener

物品在System.Net和得到的System.Net.Sockets分流到日誌文件。我試了一下,它的工作原理。我看到System.Net和System.Net.Sockets消息被記錄到文件中。 This SO article描述了相同的 - 它的工作原理。

什麼不起作用將我自己的消息從我自己的命名空間和類記錄到日誌文件。

System.Diagnostics.Debug.WriteLine("This won't end up in the log file"); 
System.Diagnostics.Trace.WriteLine("This won't end up in the log file"); 

我試過從我的應用程序更改源名稱到名稱空間。沒有工作。我無法讓我自己的WriteLines登錄到文件。它們仍然出現在Visual Studio輸出窗口中。

例如:

<system.diagnostics> 
     <sources> 
      <source name="MyAppNamespace" switchValue="All"> 
       <listeners> 
        <add name="nlog" /> 
       </listeners> 
      </source> 
     </sources> 
     <sharedListeners> 
      <add name="nlog" type="NLog.NLogTraceListener, NLog" /> 
     </sharedListeners> 
    </system.diagnostics> 

顯式調用NLOG正在登錄到日誌文件就好了:

NLog.LogManager.GetCurrentClassLogger().Trace("This Works"); 

回答

12

你已經配置了TraceSource登錄到NLOG,但你的trace語句ISN不使用該TraceSource。

嘗試:

<system.diagnostics> 
    <trace> 
     <listeners> 
      <add name="nlog" type="NLog.NLogTraceListener, NLog" /> 
     </listeners> 
    </trace> 
</system.diagnostics> 

或使用您已經配置好了TraceSource,例如:

TraceSource source = new TraceSource("MyAppNamespace"); 
source.TraceEvent(TraceEventType.Warning, 2, "File Test not found"); 
相關問題