2016-07-07 31 views
1

Log4j 1.2では、ロガーを取り出して実行時にアペンダを追加するだけで済みます。これは例えばテスト目的で便利でした。私たちはモックアペンダーを作成してロガーに追加しました。その後、我々は異なる主張をすることができた。Log4j2のLoggerにアペンダを追加する方法

log4j2と同等のものは何ですか?

たとえば、exampleは、他の人がどのようにテストアペンダーを追加したかを示しています。

log4j2ページには、アペンダーを追加する方法の例がいくつか示されています。ただし、アペンダーは全体のコンテキストに追加されます。ある特定のロガーのアペンダーを追加するのとは違うようです。

もう一つの観察では、org.apache.logging.log4j.Loggerではなくorg.apache.logging.log4j.core.Loggerを使用しても、アペンダーを追加できます。しかし、ほとんどの人はorg.apache.logging.log4j.Loggerを使用します。実際、LogManagerはorg.apache.logging.log4j.Loggerのインスタンスを返します。だから、私はこれらの2つのクラスをどのように接続するか、それらが全く接続されるべきかどうかはわかりません。

別の観察は、私が

 LogManager.getContext().getConfiguration().getLoggers() 

を呼び出す場合、私はコンテキスト内のすべてのLoggerConfigオブジェクトのイストを得ることができるということです。続いて、LoggerConfigオブジェクトにアペンダーを追加します。しかし、問題は、org.apache.logging.log4j.Loggerのインスタンスに関連するLoggerConfigを取得するにはどうすればいいですか?

これは私を混乱させます。

答えて

3

org.apache.logging.log4j.Loggerは、log4j-apiモジュールにあるインターフェイスです。 org.apache.logging.log4j.core.Loggerは、log4j-coreモジュールに存在する具象クラスです(上記のインタフェースを実装しています)。

LogManager(log4j-apiモジュール内も)はorg.apache.logging.log4j.Loggerインターフェイスを実装しています。log4j-coreモジュールがクラスパスにある場合、これはorg.apache.logging.log4j.core.Loggerのインスタンスになります。

返されたLoggerをorg.apache.logging.log4j.core.Loggerにキャストし、Appenderを追加することができます。

それぞれのコア・ロガーには、LoggerConfig(1対1の関係)があります。 LoggerConfigは、名前が同じであるため、目的のLoggerに対応しています。

+0

ありがとうございました。それがそれでした。 – Klaus

+0

追加するアペンダーのログレベルを設定するにはどうすればよいですか? – JimN

関連する問題