- - PR -
log4j でログが複数吐かれる
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-04-30 18:41
commons-logging + log4j 1.2.8 でログ出力しています。
test パッケージは DEBUG 以上をコンソールに、それ以外は INFO 以上をコンソールにログ出力されることを意図して 下記のような設定ファイルを書いてみたのですが、 test ロガーに対してログ出力要求すると、rootLogger にも 要求がわたっているようで、なぜか2回ログが吐かれてしまいます。 しかも debug 要求に対しても2回出てしまうのがわかりません。 Web でいくつかサンプルを見てみたのですが、何がおかしいのか よくわかりません。 −−ここから log4j.rootLogger=INFO,stdout log4j.logger.test=DEBUG,stdout2 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[%t] %d %-5p %c{1}#%M: %m%n log4j.appender.stdout2=org.apache.log4j.ConsoleAppender log4j.appender.stdout2.layout=org.apache.log4j.PatternLayout log4j.appender.stdout2.layout.ConversionPattern=%d %-5p %c{1}#%M: %m%n −−ここまで | ||||||||
|
投稿日時: 2004-05-01 01:03
意図と設定ファイルの内容が一致していないようです。 rootは、全てに適用されるのでtestパッケージにも適用されます。 そのため、testパッケージのログがrootに設定したAppenderとtestに設定した Appenderと2つに渡されているので2回ログが出力されてしまっているのだと 思います。 IBM developerWorksの記事「log4jによって可能になるログの制御」 http://www-6.ibm.com/jp/developerworks/java/010803/j_jw-log4j.html などを参考にされるとよいかと思います。 | ||||||||
|
投稿日時: 2004-05-01 11:22
そうみたいですね。下記にしたところ1回だけ出力されるようになりました。 −−ここから log4j.rootLogger=INFO,stdout log4j.logger.test=DEBUG −−ここまで でもこうすると、2つのロガーでコンソールに出す書式を変える ことができない。そういうものなんでしょうか? また、直す前の状態で、debug ログについても2回出てしまうのは 何故なんでしょう。。。Log4J 奥が深いです。 | ||||||||
|
投稿日時: 2004-05-01 21:46
ロガーは rootLogger を頂点とする階層構造になっています。 ロガーの定義において、上位のアペンダーは継承されます。 あるロガーでアペンダーを指定すると、それは set ではなく add と考える事ができます。 もし logger.test でアペンダーを継承しない場合は、
とする様です。 |
1