トレースやデバッグでメッセージを出力する時、その重要度に応じて出力するかしないか制御する方法として、「スイッチ」というものが用意されています。.NET Frameworkでは、BooleanSwitchとTraceSwitch、さらに.NET Framework 2.0からはSourceSwitchの3種類のスイッチがあらかじめ用意されています。
BooleanSwitchは単純なオンとオフとのスイッチです。
TraceSwitchは5段階のレベルによるスイッチです。TraceSwitchの5段階のレベルは、以下の表のようになっています(ヘルプ「TraceLevel 列挙体」より抜粋)。
トレース レベル | 構成ファイルでの値 | 説明 |
---|---|---|
Off | 0 | トレース メッセージおよびデバッグ メッセージを出力しません。 |
Error | 1 | エラー処理メッセージを出力。 |
Warning | 2 | 警告およびエラー処理メッセージを出力します。 |
Info | 3 | 情報メッセージ、警告、およびエラー処理メッセージを出力。 |
Verbose | 4 | すべてのデバッグ メッセージおよびトレース メッセージを出力します。 |
SourceSwitchも複数のレベルによるスイッチです。SourceSwitchは単独でも使用できますが、通常はTraceSourceクラスで使われます。TraceSourceクラスの使い方については、こちらで説明します。
まずはBooleanSwitchを使った例を示します。ここでは、BooleanSwitchを使ってTrace.WriteLineで出力するかしないか制御しています。コードを実行すると、「こんにちは。」は出力されず、「さようなら。」のみ出力されます。
Imports System Imports System.Diagnostics Public Class Class1 'BooleanSwitchを作成 '名前"BSwitch", 説明"BooleanSwitchのテスト"とする Private Shared myBoolSwitch As _ New BooleanSwitch("BSwitch", "BooleanSwitchのテスト") 'エントリポイント Public Shared Sub Main() 'BooleanSwitchが有効の時はメッセージを出力する If myBoolSwitch.Enabled Then Trace.WriteLine("こんにちは。") End If 'BooleanSwitchを有効にする myBoolSwitch.Enabled = True 'BooleanSwitchが有効の時はメッセージを出力する Trace.WriteLineIf(myBoolSwitch.Enabled, "さようなら。") End Sub End Class
using System; using System.Diagnostics; public class Class1 { //BooleanSwitchを作成 //名前"BSwitch", 説明"BooleanSwitchのテスト"とする private static BooleanSwitch myBoolSwitch = new BooleanSwitch("BSwitch", "BooleanSwitchのテスト"); //エントリポイント public static void Main() { //BooleanSwitchが有効の時はメッセージを出力する if (myBoolSwitch.Enabled) Trace.WriteLine("こんにちは。"); //BooleanSwitchを有効にする myBoolSwitch.Enabled = true; //BooleanSwitchが有効の時はメッセージを出力する Trace.WriteLineIf(myBoolSwitch.Enabled, "さようなら。"); } }
補足:上記の例では、if文とTrace.WriteLineIfメソッドを使った2つの例を示しましたが、ヘルプ「アプリケーション コードへのトレース ステートメントの追加」によると、if文を使った方がパフォーマンスが向上するということです。
次にTraceSwitchを使った例を示します。コードを実行すると、「Verboseレベルです。」と「Warningレベルです。」が出力されます。
Imports System Imports System.Diagnostics Public Class Class1 'TraceSwitchを作成 '名前"TSwitch", 説明"TraceSwitchのテスト"とする Private Shared myTraceSwitch As _ New TraceSwitch("TSwitch", "TraceSwitchのテスト") 'エントリポイント Public Shared Sub Main() 'トレースレベルをWarningにする myTraceSwitch.Level = TraceLevel.Warning 'レベルがVerboseの時は出力する If myTraceSwitch.TraceVerbose Then Trace.WriteLine("Verboseレベルです。") End If 'レベルがWarning以上の時は出力する If myTraceSwitch.TraceWarning Then Trace.WriteLine("Warningレベルです。") End If 'レベルがError以上の時は出力する Trace.WriteLineIf( _ myTraceSwitch.TraceError, "Errorレベルです。") End Sub End Class
using System; using System.Diagnostics; public class Class1 { //TraceSwitchを作成 //名前"TSwitch", 説明"TraceSwitchのテスト"とする private static TraceSwitch myTraceSwitch = new TraceSwitch("TSwitch", "TraceSwitchのテスト"); //エントリポイント public static void Main() { //トレースレベルをWarningにする myTraceSwitch.Level = TraceLevel.Warning; //レベルがVerboseの時は出力する if (myTraceSwitch.TraceVerbose) Trace.WriteLine("Verboseレベルです。"); //レベルがWarning以上の時は出力する if (myTraceSwitch.TraceWarning) Trace.WriteLine("Warningレベルです。"); //レベルがError以上の時は出力する Trace.WriteLineIf( myTraceSwitch.TraceError, "Errorレベルです。"); } }
BooleanSwitchの有効、無効及び、TraceSwitchのレベルは、アプリケーション構成ファイルを使って設定することもできます。次の例では、BooleanSwitchの"BSwitch"を有効にし、TraceSwitchのレベルをWarningに設定しています。なお、トレースレベルとアプリケーション構成ファイルで使用する値の対応関係は、上記の表をご覧ください。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.diagnostics> <switches> <add name="BSwitch" value="1" /> <add name="TSwitch" value="2" /> </switches> </system.diagnostics> </configuration>
上記のアプリケーション構成ファイルを使用したとき、次のようなコードを実行すると、「Warningレベルです。」と「こんにちは。」の両方が出力されます。
Imports System Imports System.Diagnostics Public Class Class1 'BooleanSwitchを作成 '名前"BSwitch", 説明"BooleanSwitchのテスト"とする Private Shared myBoolSwitch As _ New BooleanSwitch("BSwitch", "BooleanSwitchのテスト") 'TraceSwitchを作成 '名前"TSwitch", 説明"TraceSwitchのテスト"とする Private Shared myTraceSwitch As _ New TraceSwitch("TSwitch", "TraceSwitchのテスト") 'エントリポイント Public Shared Sub Main() 'レベルがWarning以上の時は出力する If myTraceSwitch.TraceWarning Then Trace.WriteLine("Warningレベルです。") End If 'BooleanSwitchが有効の時はメッセージを出力する If myBoolSwitch.Enabled Then Trace.WriteLine("こんにちは。") End If Console.ReadLine() End Sub End Class
using System; using System.Diagnostics; public class Class1 { //BooleanSwitchを作成 //名前"BSwitch", 説明"BooleanSwitchのテスト"とする private static BooleanSwitch myBoolSwitch = new BooleanSwitch("BSwitch", "BooleanSwitchのテスト"); //TraceSwitchを作成 //名前"TSwitch", 説明"TraceSwitchのテスト"とする private static TraceSwitch myTraceSwitch = new TraceSwitch("TSwitch", "TraceSwitchのテスト"); //エントリポイント public static void Main() { //レベルがWarning以上の時は出力する if (myTraceSwitch.TraceWarning) Trace.WriteLine("Warningレベルです。"); //BooleanSwitchが有効の時はメッセージを出力する if (myBoolSwitch.Enabled) Trace.WriteLine("こんにちは。"); Console.ReadLine(); } }
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。