VB.NET でログを取るには

投稿日 2015/07/30

[Home] 

概要

VB.NET でログを出力する方法はいくつかありますが、標準的な方法として考えられるのが、My.Applican.Log クラスを使う方法です。これは、System.Diagnostics.TraceSource のラッパーで、TraceSource を直接使うより簡単です。Log4.NET などはインストールが必要で、環境によっては使えないので、そういう意味でも利用しやすいです。

(注意)この記事の内容は VB 2015 で確認しています。

関連情報


使い方

標準的な使用法

まず、App.config (アプリケーション構成ファイル) が必要です。Visual Studio を使っていれば普通、自動的にプロジェクトに追加されているはずです。これに次の行を追加します (<configulation>の内側)。

<system.diagnostics>
 <sources>
   <source name="DefaultSource" switchName="DefaultSwitch">
     <listeners>
       <add name="FileLog" />
     </listeners>
   </source>
 </sources>
 <switches>
   <add name="DefaultSwitch" value="Information" />
 </switches>
 <sharedListeners>
   <!-- C:\Users\user\AppData\Roaming\Solution\AppName\1.0.0.0 に出力 -->
   <add name="FileLog"
        type="Microsoft.VisualBasic.Logging.FileLogTraceListener, 
              Microsoft.VisualBasic, Version=8.0.0.0, 
              Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
        initializeData="FileLogWriter"
        />
 </sharedListeners>
</system.diagnostics>

この設定の場合、ユーザのアプリケーションディレクトリにログファイルが作られます。具体的にいうと、ユーザIDが user, ソリューションが Solution, プロジェクトが MyApp, バージョンが 1.0.0.0 とすれば次のパス名になります。

C:\Users\user\AppData\Roaming\Solution\MyApp\1.0.0.0\MyApp.log

ログファイルのパスの変更

ログファイルの場所は変更も可能です。その場合は下の行を App.config の <configuration> に内側に追加します。この例では、c:\temp\sampleDelimitedFile.txt に出力しています。

<system.diagnostics>
 <sources>
   <source name="DefaultSource" switchName="DefaultSwitch">
     <listeners>
       <add name="Delimited" />
     </listeners>
   </source>
 </sources>
 <switches>
   <add name="DefaultSwitch" value="Information" />
 </switches>
 <sharedListeners>
   <!-- 指定したファイルに出力される。-->
   <add name="Delimited" 
        type="System.Diagnostics.DelimitedListTraceListener, 
              System, Version=2.0.0.0, 
              Culture=neutral, PublicKeyToken=b77a5c561934e089"
        initializeData="c:\temp\sampleDelimitedFile.txt"
        traceOutputOptions="DateTime" />
 </sharedListeners>
</system.diagnostics>

XML 形式でログを出力

XML 形式でログを出力することもできます。その場合は、下の行を App.config の <configuration> に内側に追加します。この例では、c:\temp\sampleLogFile.xml に出力しています。

<system.diagnostics>
 <sources>
   <source name="DefaultSource" switchName="DefaultSwitch">
     <listeners>
       <add name="XmlWriter" />
     </listeners>
   </source>
 </sources>
 <switches>
   <add name="DefaultSwitch" value="Information" />
 </switches>
 <sharedListeners>
   <!-- 指定したXMLファイルに出力される。-->
   <add name="XmlWriter"
        type="System.Diagnostics.XmlWriterTraceListener, 
              System, Version=2.0.0.0, 
              Culture=neutral, PublicKeyToken=b77a5c561934e089"
        initializeData="c:\temp\sampleLogFile.xml" />
 </sharedListeners>
</system.diagnostics>

Windows ログに出力

イベントビューアの Windows ログ (アプリケーションレベル) に出力することもできます。ただし、この場合は、管理者モードで実行しないと例外が発生します。Windows ログに出力したいときは、下の行を App.config の <configuration> に内側に追加します。

<system.diagnostics>
 <sources>
   <source name="DefaultSource" switchName="DefaultSwitch">
     <listeners>
       <!-- <add name="EventLog" /> -->
     </listeners>
   </source>
 </sources>
 <switches>
   <add name="DefaultSwitch" value="Information" />
 </switches>
 <sharedListeners>
   <!-- 管理者モードで実行しないとエラーが発生する。 -->
   <add name="EventLog"
        type="System.Diagnostics.EventLogTraceListener, 
              System, Version=2.0.0.0, 
              Culture=neutral, PublicKeyToken=b77a5c561934e089"
        initializeData="sample application"/>
 </sharedListeners>
</system.diagnostics>

コンソールに出力

コンソール画面にログを出力することもできます。その場合は、下の行を App.config の <configuration> に内側に追加します。

<system.diagnostics>
 <sources>
   <source name="DefaultSource" switchName="DefaultSwitch">
     <listeners>
       <add name="Console" />
     </listeners>
   </source>
 </sources>
 <switches>
   <add name="DefaultSwitch" value="Information" />
 </switches>
 <sharedListeners>
   <!-- コンソールに出力される。-->
   <add name="Console"
        type="System.Diagnostics.ConsoleTraceListener, 
              System, Version=2.0.0.0, 
              Culture=neutral, PublicKeyToken=b77a5c561934e089"
        initializeData="true" />
 </sharedListeners>
</system.diagnostics>

プログラム内でのログ出力方法

プログラム内でのログ出力ですが、My.Application.Log.WriteEntry(message) を呼び出すだけです。message がログのメッセージになります。

(例)

My.Application.Log.WriteEntry("・・・の取得が正常に完了しました。")

WriteEntry() メソッドには次のオーバーロードが有ります。

  1. Public Sub WriteEntry(message As String)
  2. Public Sub WriteEntry(message As String, severity As TraceEventType)
  3. Public Sub WriteEntry(message As String, severity As TraceEventType, id As Integer )

TraceEventType はエラーレベルを表します。よく使うものとしては下記のようなものがります。


例外が発生した時は、Try 文の Catch 節内で WriteException() メソッドを使うことがあります。

使用例

Try
  ' 例外が発生する可能性があるコード
  '  ...
Catch ex As Exception
  My.Application.Log.WriteException(ex, TraceEventType.Critical)
End Try

WriteException() メソッドには次のオーバーロードが有ります。

  1. Public Sub WriteException(ex As Exception)
  2. Public Sub WriteException(ex As Exception, severity As TraceEventType, additionalInfo As String)
  3. Public Sub WriteException(ex As Exception, severity As TraceEventType, additionalInfo As String, id As Integer)

 

 


 

このページの先頭へ