log4netは、VB.NETで利用できるフリーのログ出力ライブラリです。Javaのlog4jは有名なので聞いたことがある方もいるかもしれません。log4netはlog4jの.NET版です。
ある程度の規模の大きさのソフトウェアになると、デバッグやソフトウェアの状態を把握するために、ログをファイルに出力させて保存しておくことが不可欠になります。log4netを使うと、再ビルドやソフトウェアの再起動をしないでデバッグログの出力を停止させたり(ログレベルの切り替え)、月ごと/日ごとにログファイルを分けたり(ログのローテート)することが簡単に行えます。インストール手順は、以下の通りです。
このようにしておくことで、デバッグ時はもちろん、予期せぬ不具合が生じたときでも、ログを見ることで問題解決を早めることができます。
検索ワード:log4net、使い方、設定
- 「Download Apache log4net」(http://logging.apache.org/log4net/download.html)のページからincubating-log4net-1.2.10.zipをダウンロードします。
- ダウンロードしたZIPファイルを展開します。この中のbin\net\2.0にあるlog4net.dllを使用します。
- VS2010でソリューションを開き、先ほどのlog4net.dllを参照設定に追加します。
- ソリューション・エクスプローラでプロジェクトを右クリックして[追加]-[新しい項目]を選択します。「アプリケーション構成ファイル」を選択します。ファイル名はapp.configとします。すでに作成されていて表示されていない場合は、ソリューション・エクスプローラの上部のアイコン「すべてのファイルを表示」をクリックします。
- ソリューション・エクスプローラのツールバーの「すべてのファイルを表示」をオンにして、「My Project」の項目を展開し、コード・エディタでAssemblyInfo.vbを開きます。AssemblyInfo.vbの最後の行に次の1行を追加します。これで構成情報の内容が修正されたときに、ソフトウェアを再起動しなくても修正内容が再読み込みされるようになります。
<Assembly: log4net.Config.XmlConfigurator(Watch:=True)>
- app.configを開き、すでに記述されている内容はそのままにして、以下に示すようにconfiguration要素の中にconfigSection要素とlog4net要素を追加します。configSection要素は、configuration要素の先頭に記述します。36行目には出力するログレベルを指定します。つまり、デバッグ時はALLに指定(すべてのログを出力)し、デバッグが終わったらERRORに(ERROR以上だけを出力)するといったコントロールができます。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type=" log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net>
<!-- ログ出力先の定義 -->
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!-- 作成するログファイル -->
<param name="File" value=".\log\logfile" />
<!-- 追加 -->
<param name="AppendToFile" value="true" />
<!-- 日付とサイズごとにファイルを作成することを指定 -->
<param name="RollingStyle" value="Composite"/>
<param name="MaximumFileSize" value="50MB"/>
<maxSizeRollBackups value="-1" />
<!-- ログ・ファイル名が固定ではないので "false"を指定 -->
<param name="StaticLogFileName" value="false"/>
<!-- ファイル名の日付部分 -->
<param name="DatePattern" value=""."yyyyMMdd"_log.txt""/>
<!-- ログの書式 -->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %C %M %L - %m%n"/>
</layout>
</appender>
<root>
<!-- ログのレベルを指定 ALL/DEBUG/INFO/WARN/ERROR/FATAL -->
<level value="INFO" />
<!-- どのログ出力先を使用するか -->
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
<!-- (自動生成された部分は省略) -->
</configuration>
- ソースコードでは、クラスの先頭に以下のように記述し、logオブジェクトを取得します。各クラスへの記述は以下のコードと全く同じで構いません。そのままコピーして、貼り付ければよいでしょう。
Private Shared ReadOnly log As log4net.ILog = log4net.LogManager.GetLogger( _
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
- また、log4netでログを出力するには、出力したい箇所に、以下のように記述します。log4netでは、ログのレベルは5段階あり(DEBUG < INFO < WARN < ERROR < FATAL)、それぞれに対応したログ出力のメソッドが用意されています。
log.Debug("Program Started")
log.Warn("警告です")
log.Error("例外が発生しました。", exception)
log.InfoFormat("状態:{0}", state)
- ここでビルドすると、以下のようなエラーメッセージが出るかもしれません。
参照アセンブリ "log4net" は、現在のターゲット フレームワーク ".NETFramework,Version=v4.0,Profile=Client" 内にない "System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=xxxx" に依存するため、解決できませんでした。ターゲット フレームワーク内にないアセンブリへの参照を削除するか、プロジェクトを再ターゲットしてください。
- プロジェクトのプロパティを開き、コンパイル→詳細コンパイルオプションをクリックして、「コンパイラの詳細設定」ダイアログを開き、対象のフレームワークを「.NET Framework 4」にします(「.NET Framework 4 Client Profile」ではダメです)。
2011-08-29 21:35:04,578 [1] INFO XXNamespace.XXClass Method 28 - 状態:Success
検索ワード:log4net、使い方、設定
スポンサーリンク