DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

重要度に応じて(トレーススイッチを使用して)トレースやデバッグでの出力を制御する

トレースやデバッグでメッセージを出力する時、その重要度に応じて出力するかしないか制御する方法として、「スイッチ」というものが用意されています。.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を使った例を示します。ここでは、BooleanSwitchを使ってTrace.WriteLineで出力するかしないか制御しています。コードを実行すると、「こんにちは。」は出力されず、「さようなら。」のみ出力されます。

VB.NET
コードを隠すコードを選択
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
C#
コードを隠すコードを選択
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を使用した方法

次にTraceSwitchを使った例を示します。コードを実行すると、「Verboseレベルです。」と「Warningレベルです。」が出力されます。

VB.NET
コードを隠すコードを選択
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
C#
コードを隠すコードを選択
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の有効、無効及び、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レベルです。」と「こんにちは。」の両方が出力されます。

VB.NET
コードを隠すコードを選択
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
C#
コードを隠すコードを選択
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();
    }
}

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。