- PR -

log4net のエラーハンドリング

1
投稿者投稿内容
taitai1031
会議室デビュー日: 2005/03/11
投稿数: 8
投稿日時: 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/03/14
投稿数: 16
投稿日時: 2007-08-27 20:00
throw new Exception(message, e)

catch (log4netException ex)

Exceptionが違うから?
taitai1031
会議室デビュー日: 2005/03/11
投稿数: 8
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)