このチュートリアルでは、 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_ClickDefaultSource 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_ClickDefaultSource 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_ClickDefault Error: 2 : Error in the application.フィルター処理の制限が厳しくなるため、アプリケーションがアプリケーションのデバッグ出力に書き込む情報が少なくなります。
Default Error 2 Errorアプリケーションを閉じます。
デプロイ後のログ設定の変更の詳細については、「 アプリケーション ログの操作」を参照してください。
こちらも参照ください
.NET