- PR -

log4j.xmlのparseについて

投稿者投稿内容
BON
会議室デビュー日: 2007/12/26
投稿数: 4
投稿日時: 2007-12-26 19:07
はじめまして。
log4jについて質問させて頂きます。

log4jを以下のようなロジックで初期化した場合に
log4j.xmlの記述が不正な場合、Exceptionを拾って処理を続行しないよう
ハンドリングしたいのですが、できなくて困っています。

try {
DOMConfigurator.configure(filename);
} catch (Exception e) {
return false;
}

DOMConfigurator.configure()内部のdoConfigure()ではExceptionを
catch文でthrowせず、Logを出力しているだけのように見えます。

アプリ側でDocumentBuilderを利用して再度validationを行うのも
しっくりきません。
何かハンドリングする良い方法はあるのでしょうか?
だーて
常連さん
会議室デビュー日: 2007/12/18
投稿数: 20
お住まい・勤務地: ここはどーこ?私はだーて
投稿日時: 2007-12-26 20:06
こんばんは。

log4j.xmlのプロパティチェックを行いたいと思われますが、
もしそうであれば、
DOMConfigurator.configure( ) ですが、
呼び出し元にExceptionをthrowsしていないので、内部で完結してしまっています。
その為、呼び出し元ではcatchできません。
引用:

void configure (Element element) {
DOMConfigurator configurator = new DOMConfigurator();
configurator.doConfigure(element, LogManager.getLoggerRepository());
}



どうしても、というならば、
doConfigure( )もどきを自作してしまう。という手もあります。

DOMConfigurator.java内で、プロパティチェックからエラーのアウトプットまで記述されているので、
できなくはないと思います。
#FactoryConfigurationErrorとかDocumentBuilderFactoryとかImportしているので。

#スマートではないかもしれません。。。
_________________
普通?常識?何ですかそりは。
日本語は難しい・・・。
BON
会議室デビュー日: 2007/12/26
投稿数: 4
投稿日時: 2007-12-26 20:25
だーてさん、早速のお返事ありがとうございます。
やはり自作するしかないのでしょうか・・・。

log4j.xmlへの記述ミスなどでDTDのvalidationにひっかかっているにも関わらず
アプリの処理を中断できないという仕様に疑問を感じてしまうのは私だけでしょうか・・・。

運用上、あるユーザーにlog4j.xmlのタグの記載をお願いした場合などは、よくある気もしますし、何かもう少し簡単に回避する方法があれば良いのですが、難しいでしょうか?
Ray
ベテラン
会議室デビュー日: 2007/09/13
投稿数: 88
投稿日時: 2007-12-26 21:02
> 何かもう少し簡単に回避する方法

ログを確認する。
BON
会議室デビュー日: 2007/12/26
投稿数: 4
投稿日時: 2007-12-27 12:25
エラーログが出力されたタイミングではもうアプリは止まらないので
遅いのではないでしょうか?
それとも、ログをポーリングというお話でしょうか?
わたなべ
大ベテラン
会議室デビュー日: 2007/12/09
投稿数: 123
お住まい・勤務地: 札幌
投稿日時: 2007-12-27 12:50
テストする
BON
会議室デビュー日: 2007/12/26
投稿数: 4
投稿日時: 2007-12-27 13:51
やはり、システムにあまり詳しくないユーザーにテスト実行(DBに接続しない状態?)で
ログ確認してもらうという運用を強いるのも今回難しそうなので
アプリ側でDocumentBuilderを利用して再度validationを行うことにします。

ご返答下さったRayさん、わたなべさん、ありがとうございました。
Ray
ベテラン
会議室デビュー日: 2007/09/13
投稿数: 88
投稿日時: 2007-12-27 18:00
>エラーログが出力されたタイミングではもうアプリは止まらないので

サービスではなく、バッチのような非対話なアプリでしょうか。
ログを出力するだけのアプリを実行し、ログを確認すれば良いかと。いわゆるテスト。

あとはアプリからしか設定できなくするという手も。
結局内容を間違えてたら、思った通りのログは出力されませんが。

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