次の方法で共有


チュートリアル: 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 メソッドの最初と最後の呼び出しでは出力されません。 これは、 WriteEntryWriteException の重大度レベルが "情報" と "エラー" であり、どちらも 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 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. <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. アプリケーションを閉じます。

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

こちらも参照ください