追蹤參數
更新:2007 年 11 月
追蹤參數讓您可啟用、停用和篩選追蹤輸出。追蹤參數是存在於程式碼中的物件,並且可透過 .config 檔案從外部設定。.NET Framework 中提供三種追蹤參數:BooleanSwitch 類別、TraceSwitch 類別和 SourceSwitch 類別。BooleanSwitch 類別是用來當做切換參數,以啟用或停用各種追蹤陳述式。TraceSwitch 和 SourceSwitch 類別讓您能夠啟用特定追蹤層級的追蹤參數,以顯示針對該層級和該層級以下的所有層級所指定的 Trace 或 TraceSource 訊息。如果停用參數,追蹤訊息便不會顯示。所有這些類別都是衍生自抽象 (MustInherit) 類別 Switch,任何使用者開發參數都是如此。
追蹤參數對於篩選資訊非常有用。例如,您可能想要查看資料存取模組中的所有追蹤訊息,但至於應用程式的其他部分,則您只想查看其錯誤訊息。在這個情況下,您要使用一個資料存取模組的追蹤參數和一個應用程式其他部分的追蹤參數。藉由使用 .config 檔案將參數設定為適當的設定值,就可控制要接收何種追蹤訊息。如需詳細資訊,請參閱 HOW TO:建立和初始化追蹤參數和 HOW TO:設定追蹤參數。
通常部署的應用程式會在停用參數的情況下執行,這樣使用者就不需觀察螢幕上顯示的大量無關的追蹤訊息,或在應用程式執行時填入記錄檔中。如果於應用程式執行期間發生問題,您可停止應用程式,啟用參數並重新啟動應用程式。然後,追蹤訊息便會顯示。
若要使用參數,您必須先從 BooleanSwitch 類別、TraceSwitch 類別或開發人員定義的參數類別建立參數物件。如需建立開發人員定義參數的詳細資訊,請參閱 .NET Framework 參考中的 Switch 類別。接著設定組態值,以指定何時使用參數物件。然後以各種 Trace (或 Debug) 追蹤方法測試參數物件的設定值。
追蹤層級
當您使用 TraceSwitch 時,需要進行一些額外的考量。TraceSwitch 物件具有四個屬性,可傳回指出參數是否是設定成至少一個特定層級的 Boolean 值:
層級可讓您限制追蹤資訊的總數量,而只接收解決問題所需的資訊。您可將追蹤參數設定和組態為適當的追蹤層級,以指定追蹤輸出中的詳細資料層級。您可接收錯誤訊息、警告訊息、資訊訊息、詳細資訊追蹤訊息或不顯示訊息。
何種訊息與每個層級關聯完全是由您來決定。追蹤訊息的內容通常是根據與每個層級所關聯的內容而定,但是層級之間的差異則是由您來決定。例如,您可能想為某個問題提供層級 3 (Info) 的詳細描述,但是只提供層級 1 (Error) 的錯誤參考號碼。什麼樣的配置最適合您的應用程式完全是由您來決定。
以下屬性 (Property) 對應於 TraceLevel 列舉型別的 1 至 4 值。下表列出 TraceLevel 列舉型別的層級及其值。
列舉值 |
整數值 |
顯示 (或寫入至指定輸出目標) 的訊息型別 |
---|---|---|
Off |
0 |
無 |
Error |
1 |
限錯誤訊息 |
Warning |
2 |
警告訊息和錯誤訊息 |
Info |
3 |
資訊訊息、警告訊息和錯誤訊息 |
Verbose |
4 |
詳細資訊訊息、資訊訊息、警告訊息和錯誤訊息 |
TraceSwitch 屬性 (Property) 指示參數的最高追蹤層級。也就是說,追蹤資訊會以所指定的層級和所有較低的層級來寫入。例如,如果 TraceInfo 為 true,則 TraceError 和 TraceWarning 也是 true,但是 TraceVerbose 可能是 false。
這些屬性屬於唯讀屬性。當設定 TraceLevel 屬性時,TraceSwitch 物件會自動設定這些屬性。例如:
Dim myTraceSwitch As New TraceSwitch("SwitchOne", "The first switch")
myTraceSwitch.Level = TraceLevel.Info
' This message box displays true, becuase setting the level to
' TraceLevel.Info sets all lower levels to true as well.
MessageBox.Show(myTraceSwitch.TraceWarning.ToString())
' This messagebox displays false.
MessageBox.Show(myTraceSwitch.TraceVerbose.ToString())
System.Diagnostics.TraceSwitch myTraceSwitch =
new System.Diagnostics.TraceSwitch("SwitchOne", "The first switch");
myTraceSwitch.Level = System.Diagnostics.TraceLevel.Info;
// This message box displays true, becuase setting the level to
// TraceLevel.Info sets all lower levels to true as well.
MessageBox.Show(myTraceSwitch.TraceWarning.ToString());
// This message box displays false.
MessageBox.Show(myTraceSwitch.TraceVerbose.ToString());
System.Diagnostics.TraceSwitch myTraceSwitch =
new System.Diagnostics.TraceSwitch("SwitchOne", "The first switch");
myTraceSwitch.set_Level(System.Diagnostics.TraceLevel.Info);
// This message box displays true, becuase setting the level to
// TraceLevel.Info sets all lower levels to true as well.
MessageBox.Show(Convert.ToString(myTraceSwitch.get_TraceWarning()));
// This message box displays false.
MessageBox.Show(Convert.ToString(myTraceSwitch.get_TraceVerbose()));}
開發人員定義參數
除了提供 BooleanSwitch 和 TraceSwitch 以外,您還可定義自己的參數,其方式是繼承自 Switch 類別並用自訂方法來覆寫基底類別 (Base Class) 方法。如需建立開發人員定義參數的詳細資訊,請參閱 .NET Framework 參考中的 Switch 類別。