2012-12-24 28 views
13

実行時にlog4jで設定されたすべてのappenderのリストを取得できますか?実行時にLog4J Appenderのリストを取得する

シナリオをもう少し詳しく説明します。次の設定が与えられたら、どのようにすべてのアペンダー(stdoutとaltstdout)を取得するのですか?

log4j.rootLogger=error, stdout 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 

log4j.appender.altstdout=org.apache.log4j.ConsoleAppender 
log4j.appender.altstdout.layout=org.apache.log4j.PatternLayout 

# Pattern to output the caller's file name and line number. 
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 
log4j.appender.altstdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 
+0

lo4j 1.2またはlog4j2を使用していますか?タグ付けには、異なるAPIを持つため混乱します。 – Simulant

答えて

11

必要なものですなぜlog4jにLogManager.getAllAppenders()のようなメソッドがないのか分かりますが、
のように見えます。

+0

それはうまくいくかもしれませんが、私たちの必要性にはあまり関係しませんでした。私はロガーを動的に作成/変更できるようにロギング設定アプリケーションを作成していました。これは基本的に、現在使用されていないアペンダーを必要とします。最後に、すべてのアペンダーで設定され、常にOFFに設定されたロガーを作成しました。 – binarymelon

+3

これはlog4jでは機能しますが、log4j2では不可能です。なぜなら、log4j2にはLogManager.getCurrentLoggers()もLogger.getAllAppenders()もないからです。 – Joe

+1

これはどのようにlog4j2で行いますか? –

0

これは、あなたがすべてのロガー用に設定されたすべてのアペンダにアクセスしたい場合は、私がいないこの

for (Enumeration loggers=LogManager.getCurrentLoggers(); loggers.hasMoreElements();) { 
    Logger logger = (Logger) loggers.nextElement(); 
    for (Enumeration appenders=logger.getAllAppenders(); appenders.hasMoreElements();) { 
     Appender appender = (Appender) appenders.nextElement(); 
     ... 

ような何かをしなければならないあなたは

log4j Method getAllAppenders

+1

これはちょうどロガーに接続されているすべてのアペンダーを取得しますか? – binarymelon

+0

はい、アペンダーを追加できます。 – vels4j

0

私は理解するのに少し時間がかかったものを追加したいと思います。 下の図(hereからコピーしたもの)を見ると、ロガーcom.foo.barがルートロガーのFileAppenderに印刷されても、そのアペンダーリストはまだnullであることがわかります。だから、logger.getAllAppenders()というメソッドでロガーが書き込むすべてのアペンダーを取得することはできません。あなたが別々にすべてのも、親やルートロガーを反復処理する必要がある。このため

enter image description here

logger.getParent()をルートロガーに反復することはできません(ルートロガーはnullを返します - getParent()のドキュメントを参照)。私が知る限り、rootloggersのアペンダーに別途アクセスする必要がありますLogger.getRootLogger().getAllAppenders().

関連する問題