2011年2月18日金曜日

Log4jのエラーハンドラ

Log4jでよく、
「ログ書き込みの成否を取得したい」
って依頼を受けます。

通知されないのがLog4jの魅力なのですが…
まあ仕方ありません。
(成否が分からないだって!?そんなことが本当にあるのか?)

Log4jのErrorHandlerを継承して適当なクラスを作り、
アペンダには<errorhandler>を使って使用を宣言します。

あとはそのまま使えば…とはなりません。
ErrorHandlerのインターフェースは例外を返す仕様とはなっていないからです。
(RuntimeException系の例外クラスなら…
いやよそう、自分の勝手な想像でみんなを混乱させたくない。)

エラーハンドラのインスタンスへ干渉するには、
ロガーからgetAppenderでアペンダを取得して、
さらにgetErrorHandlerすればインスタンスに到達できます。

ただこれどう考えても単一のインスタンスなので、
相当排他処理を頑張らないとまずいことになりそうです。
あまりに使いにくいので、
サンプルとして紹介する価値もありません。

あれ?なんか霧が出てきたような…

追記:RuntimeExceptionでどうにかしたのはこちら

0 件のコメント:

コメントを投稿