このチュートリアルでは、 My.Application.Log
オブジェクトの既定のログ フィルター処理を変更して、 Log
オブジェクトからリスナーに渡される情報とリスナーによって書き込まれる情報を制御する方法について説明します。 構成情報はアプリケーションの構成ファイルに格納されるため、アプリケーションをビルドした後でもログの動作を変更できます。
はじめに
書き込み My.Application.Log
各メッセージには重大度レベルが関連付けられています。この重大度レベルは、フィルター処理メカニズムによってログ出力を制御するために使用されます。 このサンプル アプリケーションでは、 My.Application.Log
メソッドを使用して、重大度レベルが異なる複数のログ メッセージを書き込みます。
サンプル アプリケーションをビルドするには
新しい Visual Basic Windows アプリケーション プロジェクトを開きます。
Button1 という名前のボタンを Form1 に追加します。
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 が情報を書き込む場所の決定」を参照してください。
注
既定では、アプリケーションが閉じると、ログ ファイルの出力がフラッシュされます。
上の例では、 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
メソッドの呼び出しのみがログ出力を生成します。
アクティビティ トレース イベントのみをログに記録するには
ソリューション エクスプローラーで app.config を右クリックし、[開く] を選択します。
-又は-
app.config ファイルがない場合:
[ プロジェクト ] メニューの [ 新しい項目の追加] を選択します。
[ 新しい項目の追加 ] ダイアログ ボックスで、[ アプリケーション構成ファイル] を選択します。
追加をクリックします。
<switches>
セクションを見つけます。このセクションは、最上位レベルの<configuration>
セクションにある<system.diagnostics>
セクションにあります。スイッチのコレクションに
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" に戻します。注
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 フィルターは、
initializeData
属性としてSourceLevels列挙値の 1 つを受け取ります。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