2011-01-04 15 views
1

状況をログ記録を有効にしません:Logger.setLevel()が正しく

private static final Logger logger = Logger.getLogger(ThisClassName.class); 

そしてを通じてプログラム的にそれを設定しようとしています::、まだ

Logger.getLogger(ThisClassName.class).setLevel(Level.DEBUG); 

DEBUGレベルのプリントを私はこのlog4jのロガーを持っています(INFO印刷が正常に印刷されている間)swalloされます。 Logger.getRootLogger().setLevel(Level.DEBUG);

呼び出すlogger.debug( "foo" という)Category.forcedLog()ConsoleAppender.doAppend()に到達し、その後で失敗(終了):

であっても、このビットは何の効果もありません、これはなぜ

if(!isAsSevereAsThreshold(event.getLevel())) 

任意のアイデアをハプニング?

+0

プログラム設定と競合する可能性のある設定ファイルがありますか? – justkt

+0

@justky - プロジェクトの周囲に散在する8つのlog4j.propertiesファイルをすべて調べましたが、どれもアペンダー上にレベルがありません。 – ripper234

答えて

1

アペンダーにはdebugより大きいしきい値が設定されているため、ロガーはエントリーを無視しませんが、アペンダーはそれを記録しません。あなたの設定ファイルを介して、またはプログラム的にどちらかだけでなくDEBUGであるためにあなたのConsoleAppenderのしきい値を設定する必要があります。

((ConsoleAppender)someLogger.getAppender("CONSOLE")).setThreshold(Level.DEBUG); 

設定ファイルは、通常、この種のもののために、よりエレガントなソリューションです。

編集:どうやら、AppenderSkeletonの任意のサブクラスがshouldn't have a threshold filter set by defaultConsoleAppenderを含む)注。だからあなたの設定のどこかで、実際に@justktヒントのようにそのアペンダーに手動でスレッショルド(> Debug)を割り当てている可能性があります。

+1

設定ファイルは、アプリケーションサーバ(JBossなど、デフォルトはINFO)に付属し、OPが自分自身を設定したものではありません。彼/彼女が確認するために周りを見回すことは賢明です。 – justkt

+0

私はこれをスタンドアロンのJavaクラスとして実行しています(実際にIntelliJから)。質問に対する私のコメントを参照してください - 私はlog4j.propertiesファイルで悪いアペンダー設定を見つけられませんでした。スレッショルドを設定すると動作しました(私はルート・ロガーでそれを行いました) – ripper234