HOW TO:使用 TraceSource 和含有追蹤接聽項的篩選條件
更新:2007 年 11 月
.NET Framework 2.0 版的其中一個新功能是增強型追蹤系統;基本的前提不變:追蹤訊息透過接聽項的參數來傳送,將資料報告給關聯的輸出媒體。2.0 版的主要不同處是可以透過 TraceSource 類別的執行個體來啟始追蹤;TraceSource 的目的是要當做增強型追蹤系統來運作,而且可用來取代舊的 Trace 和 Debug 追蹤類別的靜態方法。熟悉的 Trace 和 Debug 類別仍然存在,但是建議的作法是使用 TraceSource 類別進行追蹤。
這個主題將描述將 TraceSource 與應用程式組態檔一起搭配使用的方式。可以不使用組態檔而利用 TraceSource 來進行追蹤,但是不建議這麼做。如需不使用組態檔進行追蹤的詳細資訊,請參閱 HOW TO:建立和初始化追蹤來源。
若要建立及初始化追蹤來源
使用追蹤來檢測應用程式的第一步是建立追蹤來源;在具有各種元件的大型專案中,您可以為每一個元件建立個別的追蹤來源。建議的作法是使用應用程式名稱當做追蹤來源名稱,如此可讓您輕鬆地分開保留不同的追蹤。下列程式碼會建立新的追蹤來源 (mySource) 並呼叫一個可追蹤事件的方法 (Activity1);追蹤訊息是由預設追蹤接聽項所撰寫。
using System; using System.Diagnostics; using System.Threading; namespace TraceSourceApp { class Program { private static TraceSource mySource = new TraceSource("TraceSourceApp"); static void Main(string[] args) { Activity1(); mySource.Close(); return; } static void Activity1() { mySource.TraceEvent(TraceEventType.Error, 1, "Error message."); mySource.TraceEvent(TraceEventType.Warning, 2, "Warning message."); } } }
若要建立及初始化追蹤接聽項和篩選條件
第一個程序中的程式碼不會以程式設計方式識別任何追蹤接聽項或篩選條件;程式碼本身就會產生寫入到預設追蹤接聽項中的追蹤訊息。若要設定特定的追蹤接聽項和其關聯的篩選條件,請編輯與應用程式名稱對應的組態檔;在這個檔案中,您可以加入或移除接聽項、為接聽項設定屬性和篩選條件,或是移除接聽項。下列組態檔範例將示範如何針對上一個程序中建立的追蹤來源初始化主控台追蹤接聽項及文字寫入器追蹤接聽項。除了設定追蹤接聽項之外,組態檔也會針對這兩個接聽項建立篩選條件,並為追蹤來源建立來源參數。此外,有示範兩個技巧來加入追蹤接聽項:將接聽項直接加入到追蹤來源,並將接聽項加入到共用接聽項集合,然後根據名稱將它加入到追蹤來源。會使用不同的來源層級來初始化這兩個接聽項所識別的篩選條件,如此只會讓其中一個接聽項寫入某些訊息。
<configuration> <system.diagnostics> <sources> <source name="TraceSourceApp" switchName="sourceSwitch" switchType="System.Diagnostics.SourceSwitch"> <listeners> <add name="console" type="System.Diagnostics.ConsoleTraceListener"> <filter type="System.Diagnostics.EventTypeFilter" initializeData="Warning"/> </add> <add name="myListener"/> <remove name="Default"/> </listeners> </source> </sources> <switches> <add name="sourceSwitch" value="Warning"/> </switches> <sharedListeners> <add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="myListener.log"> <filter type="System.Diagnostics.EventTypeFilter" initializeData="Error"/> </add> </sharedListeners> </system.diagnostics> </configuration>
若要變更接聽項寫入追蹤訊息的層級
組態檔會在初始化應用程式時初始化追蹤來源的設定;若要變更這些設定,您必須變更組態檔,然後重新啟動應用程式,或使用 Trace.Refresh 方法以程式設計方式重新整理應用程式。應用程式可以動態變更組態檔所設定的屬性,以覆寫使用者所指定的任何設定。例如,您可能會想要確保重大訊息一定會傳送到文字檔,不論目前的組態設定為何。
using System; using System.Diagnostics; using System.Threading; namespace TraceSourceApp { class Program { private static TraceSource mySource = new TraceSource("TraceSourceApp"); static void Main(string[] args) { Activity1(); // Change the event type for which tracing occurs. // The console trace listener must be specified // in the configuration file. First, save the original // settings from the configuration file. EventTypeFilter configFilter = (EventTypeFilter)mySource.Listeners["console"].Filter; // Then create a new event type filter that ensures // critical messages will be written. mySource.Listeners["console"].Filter = new EventTypeFilter(SourceLevels.Critical); Activity2(); // Allow the trace source to send messages to listeners // for all event types. This statement will override // any settings in the configuration file. mySource.Switch.Level = SourceLevels.All; // Restore the original filter settings. mySource.Listeners["console"].Filter = configFilter; Activity3(); mySource.Close(); return; } static void Activity1() { mySource.TraceEvent(TraceEventType.Error, 1, "Error message."); mySource.TraceEvent(TraceEventType.Warning, 2, "Warning message."); } static void Activity2() { mySource.TraceEvent(TraceEventType.Critical, 3, "Critical message."); mySource.TraceInformation("Informational message."); } static void Activity3() { mySource.TraceEvent(TraceEventType.Error, 4, "Error message."); mySource.TraceInformation("Informational message."); } } }