チュートリアル : My.Application.Log の出力をフィルタ処理する

更新 : 2007 年 11 月

このチュートリアルでは、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 による情報の書き込み先の確認」を参照してください。

メモ :

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

上の例では、2 番目の WriteEntry メソッド (My.Application.Log and My.Log) の呼び出しと WriteException メソッド (My.Application.Log および My.Log) の呼び出しではログ出力が生成され、最初と最後の 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

CriticalError、または Warning

Information

CriticalErrorWarning、または Information

Verbose

CriticalErrorWarningInformation、または Verbose

ActivityTracing

StartStopSuspendResume、または 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 による情報の書き込み先の確認

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

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

方法 : ログ メッセージを書き込む

概念

トレース スイッチ

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