41

プロパティ スタイルの構成から xml スタイルに移行するように依頼されました。プロセス自体は簡単で、問題はありません。なぜこのように尋ねられたのかが気になり、その理由を調べました。私はこの素敵な投稿を見つけました (3年以上前ですが、私が見つけた中で最も有益です)、これはさらに古いチュートリアルを指していました。彼らは述べています

プロパティは、プロパティ ファイルまたは XML ファイルで定義できます。

Log4j は、log4j.xml という名前のファイルを探し、次に log4j.properties という名前のファイルを探します。どちらも src フォルダーに配置する必要があります。

私はそれをチェックアウトし、ステートメントに反して、Log4j は最初にプロパティ ファイルを検索し、次に xml を検索することがわかりました。実際、両方を同じフォルダーに保持すると、出力はプロパティ ファイルに従ってフォーマットされます。それで、私は声明を誤解していますか?それは単に間違っていますか?log4j 1.2.17を使用している間に、log4j 1.2.14に対して声明が作成されましたが、log4j チームが優先度を変更した可能性はありますか? 関連するドキュメントは見つかりませんでしたが、xml が log4j を構成するための推奨される方法であるように見えたため、奇妙な傾向の逆転になるでしょう。

4

2 に答える 2

25

JavaDocを見てください。PropertyConfiguratorClass (log4j.properties)のドキュメントは、次のように指摘しています。

PropertyConfiguratorは、カスタムErrorHandlerのサポート、AsyncAppenderなどのネストされたアペンダーなど、DOMConfiguratorでサポートされる高度な構成機能を処理しません。

そのため、DOMConfigurator(log4j.xml)は高度なオプションを提供します。

それに加えて、提供されたlog4j.dtdを使用してlog4j.xmlファイルの(少なくとも単純な)有効性チェックを行うことができます。

高度な機能を利用しない場合は、プロパティからxmlファイルに変更する必要はありません。

あなたが本当に考えるべきことは、log4jからlog4j 2ベータ、あるいは slf4jに変更することです。log4jの開発は停止し、その創設者(@Ceki)はslf4jを発明しました。

于 2013-01-24T09:55:11.267 に答える
2

FrVaBe 's answerによると、PropertyConfigurator クラスは XML がサポートできる高度な機能を処理しません。

より便利な高度なオプション (log4j.xml でのみ使用可能) の 1 つは、LevelMatchFilter および DenyAllFilter を使用して特定のログ レベルまたはログ レベルの範囲でフィルター処理する機能です。

良い例をここで見ることができます。

于 2015-10-29T15:11:22.380 に答える