チュートリアル: My.Application.Log の出力のフィルター処理 (Visual Basic)
このチュートリアルでは、My.Application.Log
オブジェクトの既定のログ フィルター処理を変更して、Log
オブジェクトからリスナーに渡される情報や、リスナーによって記述される情報を制御する方法について説明します。 構成情報はアプリケーションの構成ファイルに保存されるため、ロギングの動作はアプリケーションをビルドした後でも変更できます。
作業の開始
My.Application.Log
が書き込む各メッセージには、重大度レベルが関連付けられます。この情報は、ログ出力を制御するためにフィルター処理メカニズムによって使用されます。 このサンプル アプリケーションでは、My.Application.Log
メソッドを使用して、重大度レベルの異なる複数のログ メッセージを書き込みます。
サンプル アプリケーションをビルドするには
新しい Visual Basic Windows アプリケーション プロジェクトを開きます。
Form1 に Button1 という名前のボタンを追加します。
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)
デバッガーでアプリケーションを実行します。
[Button1] を押します。
アプリケーションは、アプリケーションのデバッグ出力とログ ファイルに次の情報を書き込みます。
DefaultSource Information: 0 : In Button1_Click
DefaultSource Error: 2 : Error in the application.
アプリケーションを終了します。
アプリケーションのデバッグ出力ウィンドウを表示する方法について詳しくは、「出力ウィンドウ」をご覧ください。 アプリケーションのログ ファイルの場所について詳しくは、「チュートリアル: My.Application.Log による情報の書き込み先の確認」をご覧ください。
Note
既定では、アプリケーションはアプリケーションの終了時にログ ファイルの出力をフラッシュします。
上の例では、WriteEntry メソッドの 2 回目の呼び出しと WriteException メソッドの呼び出しでログが出力されます。
WriteEntry
メソッドの最初と最後の呼び出しでは出力されません。 これは、WriteEntry
とWriteException
の重大度レベルが "Information" と "Error" であるためです。これらはどちらも、My.Application.Log
オブジェクトの既定のログ フィルター処理で許可されます。 これに対し、重大度レベルが "Start" および "Stop" のイベントについては、ログ出力が生成されません。
すべての My.Application.Log リスナーのフィルター処理
My.Application.Log
オブジェクトは、DefaultSwitch
という名前の SourceSwitch を使用し、WriteEntry
および WriteException
メソッドからログ リスナーに渡すメッセージを制御します。 アプリケーションの構成ファイル内にある DefaultSwitch
は、その値を SourceLevels 列挙値のいずれかに設定することで構成できます。 既定では、この値は "Information" です。
次の表は、Log がリスナーにメッセージを書き込むために必要な重大度レベルを、DefaultSwitch
の設定ごとに示したものです。
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 |
すべてのメッセージがブロックされます。 |
Note
WriteEntry
メソッドと WriteException
メソッドにはそれぞれ、重大度レベルを指定しないオーバー ロードがあります。 WriteEntry
オーバー ロードの暗黙的な重大度レベルは "Information" で、WriteException
オーバー ロードの暗黙的な重大度レベルは "Error" です。
次の表は、前の例に示したログ出力について説明したものです。 既定の DefaultSwitch
設定 (Information) では、WriteEntry
メソッドに対する 2 番目の呼び出しと、WriteException
メソッドに対する呼び出しでのみ、ログ出力が生成されます。
アクティビティ トレース イベントだけを記録するには
ソリューション エクスプローラーで app.config を右クリックし、 [開く] を選択します。
または
app.config ファイルがない場合は、次の操作を行います。
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスで、 [アプリケーション構成ファイル] を選択します。
[追加] をクリックします。
最上位の
<configuration>
セクション内の<system.diagnostics>
セクションで、<switches>
セクションを見つけます。スイッチのコレクションに
DefaultSwitch
を追加する要素を見つけます。 これは次のような要素です。<add name="DefaultSwitch" value="Information" />
value
属性の値を "ActivityTracing" に変更します。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>
デバッガーでアプリケーションを実行します。
[Button1] を押します。
アプリケーションは、アプリケーションのデバッグ出力とログ ファイルに次の情報を書き込みます。
DefaultSource Start: 4 : Entering Button1_Click
DefaultSource Stop: 5 : Leaving Button1_Click
アプリケーションを終了します。
value
属性の値を "Information" に戻します。Note
DefaultSwitch
スイッチの設定では、My.Application.Log
のみが制御されます。 .NET の System.Diagnostics.Trace クラスと System.Diagnostics.Debug クラスの動作が変えられることはありません。
My.Application.Log リスナーの個別のフィルター処理
前の例では、すべての My.Application.Log
出力のフィルター処理を変更する方法について説明しました。 この例では、個別のログ リスナーをフィルター処理する方法について説明します。 既定では、アプリケーションには、アプリケーションのデバッグ出力とログ ファイルに情報を書き込む 2 つのリスナーがあります。
構成ファイルは、My.Application.Log
のスイッチのように、各リスナーにフィルターを適用することで、ログ リスナーの動作を制御します。 ログ リスナーは、メッセージの重大度がログの DefaultSwitch
とログ リスナーのフィルターの両方によって許可された場合にのみ、メッセージを出力します。
この例では、新しいデバッグ リスナーのフィルター処理を構成し、それを Log
オブジェクトに追加する方法について説明します。 デバッグ メッセージが新しいデバッグ リスナーから送られるようにするには、既定のデバッグ リスナーを Log
オブジェクトから削除する必要があります。
アクティビティ トレース イベントだけを記録するには
ソリューション エクスプローラーで app.config を右クリックし、 [開く] を選択します。
または
app.config ファイルがない場合は、次の操作を行います。
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスで、 [アプリケーション構成ファイル] を選択します。
[追加] をクリックします。
ソリューション エクスプローラーで app.config を右クリックします。 [開く] をクリックします。
<sources>
セクション内にある、name
属性が "DefaultSource" の<source>
セクションで、<listeners>
セクションを見つけます。<sources>
セクションは、最上位の<configuration>
セクション内の<system.diagnostics>
セクションにあります。<listeners>
セクションに次の要素を追加します。<!-- Remove the default debug listener. --> <remove name="Default"/> <!-- Add a filterable debug listener. --> <add name="NewDefault"/>
最上位の
<sharedListeners>
セクション内の<system.diagnostics>
セクションで、<configuration>
セクションを見つけます。その
<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 フィルターは SourceLevels 列挙値の 1 つをその
initializeData
属性として取ります。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>
デバッガーでアプリケーションを実行します。
[Button1] を押します。
アプリケーションは、アプリケーションのログ ファイルに次の情報を書き込みます。
Default Information: 0 : In Button1_Click
Default Error: 2 : Error in the application.
フィルター処理の基準がより厳しくなったので、アプリケーションのデバッグ出力に書き込まれる情報は少なくなります。
Default Error 2 Error
アプリケーションを終了します。
配置後にログの設定を変更する方法については、「アプリケーション ログの使用」をご覧ください。
参照
.NET