Log4Netでエラーのハンドリングを行なう方法
環境
Log4Net 1.2.10 for .NET Framework 1.1
WindowsXP + VisualStudio2003 + VB.NET
例えば、FileAppender を利用してファイルにログを出力している時にファイルがロックされたり
出力先がリモートフォルダでネットワークが切断されてしまった場合にログが吐けないがエラーが検知できない。
(まあ、他の Appender と併用すれば言いと言う話もあるけどね。)
まずは、log4net.Core.IErrorHandler インターフェースを実装したクラスを作成する。
Public Class Log4Net_ErrorHandler Implements log4net.Core.IErrorHandler Public Overloads Sub [Error](ByVal message As String) Implements log4net.Core.IErrorHandler.Error Throw New Exception(message) End Sub Public Overloads Sub [Error](ByVal message As String, ByVal e As System.Exception) _ Implements log4net.Core.IErrorHandler.Error Throw New Exception(message, e) End Sub Public Overloads Sub [Error](ByVal message As String, ByVal e As System.Exception, _ ByVal errorCode As log4net.Core.ErrorCode) Implements log4net.Core.IErrorHandler.Error Throw New Exception(message, e) End Sub End Class
設定ファイルの FileAppender のセクションに ErrorHandler 属性に作ったクラスを設定する
※ Log4Net_Test はプロジェクトの名称
これで、Log4Net_ErrorHandler クラスの Error メソッドが異常時にコールされます。
ただ、Log4Net_ErrorHandlerクラスの生成を LogManager(?)が行なっているので実際は対応が行ないにくいかもしれないので、別の方法も。
設定ファイルの ErrorHandler 属性は削除して。
Dim log As log4net.ILog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType) Dim oAppender As log4net.Appender.FileAppender Dim oHandler As New Log4Net_ErrorHandler oAppender = log.Logger.Repository.GetAppenders(0) oAppender.ErrorHandler = oHandler
って書けば、任意のAppender に対してエラーハンドリングできるし、Log4Net_ErrorHandler も見える位置に居るので対応がやりやすいのかも。
※log.Logger.Repository.GetAppenders(0) の箇所は当然、利用している Appender が増えれば (0) 固定では出来ないので .Length でループで FileAppender を探してね。
Appender 毎の出力レベルの設定の方法はマニュアルに書いてあるレベルの設定で出来た。まあ、当然かな。笑