2011-01-12 42 views
5

在我的app.config中我想設置3個跟蹤級別(開關?):verbose,warning和none。 在代碼的調試版本中,我希望verbose開關處於活動狀態,在發佈警告中。在特殊情況下,我的應用程序用戶可以修改配置文件以禁用所有跟蹤。無法理解.net 2010跟蹤和app.config

我希望調試跟蹤在控制檯上輸出,而發佈只跟蹤到日誌文件。

我,已經寫了以下內容:

[...] 
<system.diagnostics> 
     <sources> 
      <!-- This section defines the logging configuration for My.Application.Log --> 
      <source name="debug" switchName="debug"> 
      <listeners> 
       <add name="FileLog"/> 
       <add name="console"/> 
      </listeners> 
      </source> 

      <source name="release" switchName="release"> 
      <listeners> 
       <add name="FileLog"/> 
      </listeners> 
      </source> 

      <source name="silent" switchName="none"> 
      <listeners/> 
      </source> 
     </sources> 


     <switches> 
      <add name="debug" value="Verbose"/> 
      <add name="release" value="Warning"/> 
      <add name="none" value="Off"/> 
     </switches> 


     <!--<sharedListeners> 
      <add name="FileLog" type="System.Diagnostics.TextWriterTraceListener" traceOutputOptions="DateTime" initializeData="felix.log"/> 
      <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false" /> 
     </sharedListeners>--> 

     <trace autoflush="false" indentsize="4"> 
      <listeners> 
       <add name="FileLog" type="System.Diagnostics.TextWriterTraceListener" traceOutputOptions="DateTime" initializeData="felix.log"/> 
       <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false"/> 
       <remove name="Default"/> 
      </listeners> 
     </trace> 

    </system.diagnostics> 
[...] 

然後在代碼中,我呼叫跟蹤這樣的:

Public Shared Sub HandleException(ByVal ex As Exception) 
    Trace.WriteLine(ex.Message, "Error") 

[...]

有我丟失的東西我認爲。我如何說跟蹤方法正確的開關使用?我的應用程序用戶如何更改配置文件以允許跟蹤或禁用它?

感謝。

回答

7

您似乎在通過Trace.Write和Trace.WriteLine將記錄/追蹤的概念與使用TraceSource對象進行記錄/追蹤混合。

TraceSource對象允許您單獨控制(通過開關)「記錄對象」,以便您可以打開某些代碼的登錄並關閉代碼的其他部分。 TraceSource對象的輸出可以配置爲轉到不同的TraceListeners(或相同的TraceListener)。 Trace.WriteLine不是非常靈活。它可以配置爲只有一個級別(即全局可以在Debug或Info或其他任何地方登錄),而使用TraceSources,一個TraceSource可以在Debug上記錄,另一個可以登錄Info,而另一個可以完全關閉。

在這些鏈接中查看我的答案,瞭解如何配置TraceSources以及如何在代碼中使用它們的一些示例。

How to use TraceSource across classes

Turning tracing off via app.config

What's the best approach to logging?

Add Trace methods to System.Diagnostics.TraceListener

至於你怎麼想你的跟蹤/日誌在調試工作VS版本中,可以有兩個不同的app.config文件。兩者都會定義相同的TraceSources(即同一組「已命名的」跟蹤/日誌記錄對象)。在與調試版本一起使用的app.config中,可以將跟蹤/日誌記錄級別設置爲一個值Debug/Info/Whatever,並且您可以將輸出指向控制檯和/或文件和/或其他任何值。在與調試版本配合使用的app.config中,可以將跟蹤/日誌記錄級別設置爲不同的值(或關),並將輸出指向文件。

在上面的兩篇文章中,我都包含了其他幾個關於System.Diagnostics信息的鏈接,其中包括Ukadc.Diagnostics項目。此項目提供了一個非常有趣的格式化功能,可用於基於System.Diagnostics的TraceListeners(提供的監聽器來自Ukadc.Diagnostics),並且實際的跟蹤/日誌記錄語句沒有任何變化。格式化功能與log4net和NLog提供的功能類似。

閱讀我上面鏈接的信息,看看它是否有幫助。嘗試使用TraceSources而不是Trace.WriteLine。當你對此感到滿意時,也許看看Ukadc.Diagnostics。

+0

非常感謝你,我已經閱讀了所有內容,你在我的日誌記錄黑暗中闡明瞭一切:)我建議你寫一篇文章/博客文章/網頁,不管集中所有這些信息, 。如果你這樣做,然後給我鏈接!再次感謝。 – vulkanino 2011-01-13 09:51:29