- PR -

log4j でログが複数吐かれる

1
投稿者投稿内容
ボア
ベテラン
会議室デビュー日: 2002/05/22
投稿数: 78
投稿日時: 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
−−ここまで
ToGo
常連さん
会議室デビュー日: 2002/03/16
投稿数: 46
投稿日時: 2004-05-01 01:03
引用:

ボアさんの書き込み (2004-04-30 18:41) より:

test パッケージは DEBUG 以上をコンソールに、それ以外は
INFO 以上をコンソールにログ出力されることを意図して
下記のような設定ファイルを書いてみたのですが、



意図と設定ファイルの内容が一致していないようです。
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
などを参考にされるとよいかと思います。

ボア
ベテラン
会議室デビュー日: 2002/05/22
投稿数: 78
投稿日時: 2004-05-01 11:22
引用:

ToGoさんの書き込み (2004-05-01 01:03) より:
rootは、全てに適用されるのでtestパッケージにも適用されます。
そのため、testパッケージのログがrootに設定したAppenderとtestに設定した
Appenderと2つに渡されているので2回ログが出力されてしまっているのだと
思います。



そうみたいですね。下記にしたところ1回だけ出力されるようになりました。

−−ここから
log4j.rootLogger=INFO,stdout
log4j.logger.test=DEBUG
−−ここまで

でもこうすると、2つのロガーでコンソールに出す書式を変える
ことができない。そういうものなんでしょうか?
また、直す前の状態で、debug ログについても2回出てしまうのは
何故なんでしょう。。。Log4J 奥が深いです。
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2004-05-01 21:46
引用:
ボアさんの書き込み (2004-05-01 11:22) より:
また、直す前の状態で、debug ログについても2回出てしまうのは
何故なんでしょう。。。Log4J 奥が深いです。



ロガーは rootLogger を頂点とする階層構造になっています。
ロガーの定義において、上位のアペンダーは継承されます。
あるロガーでアペンダーを指定すると、それは set ではなく add と考える事ができます。

もし logger.test でアペンダーを継承しない場合は、
コード:
log4j.additivity.test=false


とする様です。
1

スキルアップ/キャリアアップ(JOB@IT)