次の方法で共有


チュートリアル: 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 イベント ハンドラーに次のコードを追加します。

  4. アプリケーションをデバッガーで実行します。

  5. Button1 をクリックします。

    アプリケーションのデバッグ出力およびログ ファイルに次の情報が書き込まれます。

    DefaultSource Information: 0 : In Button1_Click

    DefaultSource Error: 2 : Error in the application.

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

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

[!メモ]

既定では、アプリケーションは、アプリケーションの終了時にログ ファイル出力をフラッシュします。

上の例では、2 番目の WriteEntry メソッドの呼び出しと WriteException メソッドの呼び出しではログ出力が生成され、最初と最後の WriteEntry メソッドの呼び出しでは生成されません。その理由は、WriteEntry と WriteException の重大度レベルは "Information" と "Error" であり、いずれも My.Application.Log オブジェクトの既定のログ フィルター処理を通過するからです。一方、重大度レベルが "Start" と "Stop" のイベントは、ログ出力は生成されません。

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

My.Application.Log オブジェクトは、WriteEntry メソッドおよび WriteException メソッドからのどのメッセージをログ リスナーに渡すかを、DefaultSwitch という名前の SourceSwitch を使用して制御します。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. 最上位の <configuration> セクション内の <system.diagnostics> セクションで、<switches> セクションを見つけます。

  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 Framework の 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. 最上位の <configuration> セクション内の <system.diagnostics> セクションで、<sharedListeners> セクションを見つけます。

  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 列挙値をとります。

  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. アプリケーションを閉じます。

配置の後でログ設定を変更する方法の詳細については、「Visual Basic でのアプリケーション ログの使用」を参照してください。

参照

処理手順

チュートリアル: My.Application.Log による情報の書き込み先の確認 (Visual Basic)

チュートリアル: My.Application.Log による情報の書き込み先の変更 (Visual Basic)

チュートリアル: カスタム ログ リスナーの作成 (Visual Basic)

方法: ログ メッセージを書き込む (Visual Basic)

概念

トレース スイッチ

アプリケーションからの情報のログ記録 (Visual Basic)