- - PR -
log4net のエラーハンドリング
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-08-24 11:38
みなさま log4net のエラーハンドリングはどのようにしてますか?
色々調べたところ appender 毎にエラーハンドラを設定出来る様で 試してみました。 自分がやりたかったことは ADOappender を利用してDBに直接書込み ネットワーク障害等で失敗した場合は FileAppender で追記でファイル に書込み最終的に SQLLoader で DB にインポートする。と言うやり方です。 障害中は ファイルに書き込まれるのでログの消失を防ぐことができます。 そこで ADOappender が失敗した場合の例外をキャッチしたいと考え IErrorHandler を継承したクラス(ADOappenderErrorHandler)を作成し ADOappender のエラーハンドラにそのクラスを指定しました。 ADOappenderErrorHandler クラスは以下の通りです。 public class ADONetAppenderErrorHandler : log4net.Core.IErrorHandler { public void Error(string message) { throw new Exception(message); } public void Error(string message, Exception e) { throw new Exception(message, e); } public void Error(string message, Exception e, log4net.Core.ErrorCode errorcode) { throw new Exception(message, e); } } ログの記述メソッドです。 public void Info(string message) { Try { this.logger.Info(message); //ADOappender でログ記述 }catch (log4netException ex){ this.Write("INFO",message); //FileAppender でログ記述 } } 以上で動作確認を取ると実際に ADOappender で失敗した場合は エラーハンドラクラスに処理を委譲されました。 しかし、エラーハンドラクラスで例外を throw しているにも関わらず ログ記述メソッドで catch されずに何事もなく通過してしまうのです。 ADOappender なんて使わないほうが・・・と言われるとそれまでなのですが。 例外を catch 出来ないのでしょうか。 みなさまよろしくお願いいたします。 |
|
投稿日時: 2007-08-27 20:00
throw new Exception(message, e)
と catch (log4netException ex) で Exceptionが違うから? |
|
投稿日時: 2007-09-06 11:45
すみませんでした。
投稿したソースを間違えていました。 以下のようにしてもキャッチできませんでした。 public void Info(string message) { Try { this.logger.Info(message); //ADOappender でログ記述 }catch (Exception ex){ this.Write("INFO",message); //FileAppender でログ記述 } } |
1