チュートリアル: My.Application.Log 出力のフィルター処理 (Visual Basic)

このチュートリアルでは、 My.Application.Log オブジェクトの既定のログ フィルター処理を変更して、 Log オブジェクトからリスナーに渡される情報とリスナーによって書き込まれる情報を制御する方法について説明します。 構成情報はアプリケーションの構成ファイルに格納されるため、アプリケーションをビルドした後でもログの動作を変更できます。

はじめに

書き込み My.Application.Log 各メッセージには重大度レベルが関連付けられています。この重大度レベルは、フィルター処理メカニズムによってログ出力を制御するために使用されます。 このサンプル アプリケーションでは、 My.Application.Log メソッドを使用して、重大度レベルが異なる複数のログ メッセージを書き込みます。

サンプル アプリケーションをビルドするには

  1. 新しい Visual Basic Windows アプリケーション プロジェクトを開きます。

  2. Button1 という名前のボタンを Form1 に追加します。

  3. Button1 の Click イベント ハンドラーに、次のコードを追加します。

    ' Activity tracing information
    My.Application.Log.WriteEntry("Entering Button1_Click", TraceEventType.Start)
    
    ' Tracing information
    My.Application.Log.WriteEntry("In Button1_Click", TraceEventType.Information)
    
    ' Create an exception to log.
    Dim ex As New ApplicationException
    ' Exception information
    My.Application.Log.WriteException(ex)
    
    ' Activity tracing information
    My.Application.Log.WriteEntry("Leaving Button1_Click", TraceEventType.Stop)
    
  4. デバッガーでアプリケーションを実行します。

  5. Button1 キーを押します。

    アプリケーションは、次の情報をアプリケーションのデバッグ出力とログ ファイルに書き込みます。

    DefaultSource Information: 0 : In Button1_Click

    DefaultSource Error: 2 : Error in the application.

  6. アプリケーションを閉じます。

    アプリケーションのデバッグ出力ウィンドウを表示する方法については、「 出力ウィンドウ」を参照してください。 アプリケーションのログ ファイルの場所については、「 チュートリアル: My.Application.Log が情報を書き込む場所の決定」を参照してください。

    注

    既定では、アプリケーションが閉じると、ログ ファイルの出力がフラッシュされます。

    上の例では、 WriteEntry メソッドの 2 番目の呼び出しと WriteException メソッドの呼び出しによってログ出力が生成されますが、 WriteEntry メソッドの最初と最後の呼び出しでは出力されません。 これは、 WriteEntry と WriteException の重大度レベルが "情報" と "エラー" であり、どちらも My.Application.Log オブジェクトの既定のログ フィルター処理で許可されるためです。 ただし、重大度レベルが "Start" および "Stop" のイベントでは、ログ出力が生成されません。

すべての My.Application.Log リスナーのフィルター処理

My.Application.Log オブジェクトは、DefaultSwitchという名前のSourceSwitchを使用して、WriteEntryメソッドとWriteException メソッドからログ リスナーに渡すメッセージを制御します。 アプリケーションの構成ファイルで DefaultSwitch を構成するには、その値を SourceLevels 列挙値のいずれかに設定します。 既定では、その値は "Information" です。

次の表は、特定の DefaultSwitch 設定を指定して、Log がリスナーにメッセージを書き込むために必要な重大度レベルを示しています。

DefaultSwitch 値 出力に必要なメッセージの重大度
Critical Critical
Error Critical または Error
Warning Critical、 Error、または Warning
Information Critical、Error、Warning、または Information
Verbose Critical、Error、Warning、Information、または Verbose
ActivityTracing Start、Stop、Suspend、Resume、または Transfer
All すべてのメッセージが許可されます。
Off すべてのメッセージがブロックされます。

注

WriteEntryメソッドとWriteException メソッドにはそれぞれ、重大度レベルを指定しないオーバーロードがあります。 WriteEntry オーバーロードの暗黙的な重大度レベルは "Information" で、WriteException オーバーロードの暗黙的な重大度レベルは "Error" です。

次の表では、前の例で示したログ出力について説明します。既定の DefaultSwitch 設定の "Information" では、 WriteEntry メソッドの 2 番目の呼び出しと、 WriteException メソッドの呼び出しのみがログ出力を生成します。

アクティビティ トレース イベントのみをログに記録するには

  1. ソリューション エクスプローラーで app.config を右クリックし、[開く] を選択します。

    -又は-

    app.config ファイルがない場合:

    1. [ プロジェクト ] メニューの [ 新しい項目の追加] を選択します。

    2. [ 新しい項目の追加 ] ダイアログ ボックスで、[ アプリケーション構成ファイル] を選択します。

    3. 追加をクリックします。

  2. <switches> セクションを見つけます。このセクションは、最上位レベルの <configuration> セクションにある <system.diagnostics> セクションにあります。

  3. スイッチのコレクションに DefaultSwitch を追加する要素を見つけます。 次の要素のようになります。

    <add name="DefaultSwitch" value="Information" />

  4. value属性の値を "ActivityTracing" に変更します。

  5. app.config ファイルの内容は、次の XML のようになります。

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.diagnostics>
        <sources>
          <!-- This section configures My.Application.Log -->
          <source name="DefaultSource" switchName="DefaultSwitch">
            <listeners>
              <add name="FileLog"/>
            </listeners>
          </source>
        </sources>
        <switches>
          <add name="DefaultSwitch" value="ActivityTracing" />
        </switches>
        <sharedListeners>
          <add name="FileLog"
               type="Microsoft.VisualBasic.Logging.FileLogTraceListener,
                     Microsoft.VisualBasic, Version=8.0.0.0,
                     Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
                     processorArchitecture=MSIL"
               initializeData="FileLogWriter"/>
        </sharedListeners>
      </system.diagnostics>
    </configuration>
    
  6. デバッガーでアプリケーションを実行します。

  7. Button1 キーを押します。

    アプリケーションは、次の情報をアプリケーションのデバッグ出力とログ ファイルに書き込みます。

    DefaultSource Start: 4 : Entering Button1_Click

    DefaultSource Stop: 5 : Leaving Button1_Click

  8. アプリケーションを閉じます。

  9. value属性の値を "Information" に戻します。

    注

    DefaultSwitchスイッチ設定は、My.Application.Logのみを制御します。 .NET System.Diagnostics.Trace クラスと System.Diagnostics.Debug クラスの動作は変更されません。

My.Application.Log リスナーの個別のフィルター処理

前の例は、すべての My.Application.Log 出力のフィルター処理を変更する方法を示しています。 この例では、個々のログ リスナーをフィルター処理する方法を示します。 既定では、アプリケーションには、アプリケーションのデバッグ出力とログ ファイルに書き込む 2 つのリスナーがあります。

構成ファイルは、 My.Application.Logのスイッチに似たフィルターを各リスナーに許可することで、ログ リスナーの動作を制御します。 ログ リスナーは、ログの DefaultSwitch とログ リスナーのフィルターの両方でメッセージの重大度が許可されている場合にのみ、メッセージを出力します。

この例では、新しいデバッグ リスナーのフィルター処理を構成し、 Log オブジェクトに追加する方法を示します。 既定のデバッグ リスナーは、 Log オブジェクトから削除する必要があるため、デバッグ メッセージが新しいデバッグ リスナーから送信されることは明らかです。

アクティビティ トレース イベントのみをログに記録するには

  1. ソリューション エクスプローラーで app.config を右クリックし、[開く] を選択します。

    -又は-

    app.config ファイルがない場合:

    1. [ プロジェクト ] メニューの [ 新しい項目の追加] を選択します。

    2. [ 新しい項目の追加 ] ダイアログ ボックスで、[ アプリケーション構成ファイル] を選択します。

    3. 追加をクリックします。

  2. ソリューション エクスプローラーで app.config を右クリックします。 [ 開く] を選択します。

  3. <sources> セクションの下にある name 属性 "DefaultSource" を持つ <source> セクションで、<listeners> セクションを見つけます。 <sources> セクションは、最上位レベルの <configuration> セクションの <system.diagnostics> セクションにあります。

  4. この要素を <listeners> セクションに追加します。

    <!-- Remove the default debug listener. -->
    <remove name="Default"/>
    <!-- Add a filterable debug listener. -->
    <add name="NewDefault"/>
    
  5. [<sharedListeners>] セクションの最上位レベルの [<system.diagnostics>] セクションで、<configuration> セクションを見つけます。

  6. この要素をその <sharedListeners> セクションに追加します。

    <add name="NewDefault"
         type="System.Diagnostics.DefaultTraceListener,
               System, Version=2.0.0.0, Culture=neutral,
               PublicKeyToken=b77a5c561934e089,
               processorArchitecture=MSIL">
        <filter type="System.Diagnostics.EventTypeFilter"
                initializeData="Error" />
    </add>
    

    EventTypeFilter フィルターは、initializeData属性としてSourceLevels列挙値の 1 つを受け取ります。

  7. app.config ファイルの内容は、次の XML のようになります。

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.diagnostics>
        <sources>
          <!-- This section configures My.Application.Log -->
          <source name="DefaultSource" switchName="DefaultSwitch">
            <listeners>
              <add name="FileLog"/>
              <!-- Remove the default debug listener. -->
              <remove name="Default"/>
              <!-- Add a filterable debug listener. -->
              <add name="NewDefault"/>
            </listeners>
          </source>
        </sources>
        <switches>
          <add name="DefaultSwitch" value="Information" />
        </switches>
        <sharedListeners>
          <add name="FileLog"
               type="Microsoft.VisualBasic.Logging.FileLogTraceListener,
                     Microsoft.VisualBasic, Version=8.0.0.0,
                     Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
                     processorArchitecture=MSIL"
               initializeData="FileLogWriter"/>
          <add name="NewDefault"
               type="System.Diagnostics.DefaultTraceListener,
                     System, Version=2.0.0.0, Culture=neutral,
                     PublicKeyToken=b77a5c561934e089,
                     processorArchitecture=MSIL">
            <filter type="System.Diagnostics.EventTypeFilter"
                    initializeData="Error" />
          </add>
        </sharedListeners>
      </system.diagnostics>
    </configuration>
    
  8. デバッガーでアプリケーションを実行します。

  9. Button1 キーを押します。

    アプリケーションは、アプリケーションのログ ファイルに次の情報を書き込みます。

    Default Information: 0 : In Button1_Click

    Default Error: 2 : Error in the application.

    フィルター処理の制限が厳しくなるため、アプリケーションがアプリケーションのデバッグ出力に書き込む情報が少なくなります。

    Default Error 2 Error

  10. アプリケーションを閉じます。

デプロイ後のログ設定の変更の詳細については、「 アプリケーション ログの操作」を参照してください。

こちらも参照ください