log4php

まぁlog4phpだけに限った話ではないんだけど、log4xx の設定ファイルで指定したロガーは階層構造になっている。んで、rootLoggerに指定したappender は、デフォルトでは全てのロガーでも使いまわされる、のである。

つまり、rootLogger で標準出力にロギングするようにしていた場合、自分で定義したロガーも、標準出力にロギングしてしまうのである(したくもないし、そんな設定をした覚えもないのに)。

色々探してる、まさにこれ↓と同じ現象でした。
log4j でログが複数吐かれる

解決策


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

もし logger.test でアペンダーを継承しない場合は、

log4j.additivity.test=false

とする様です。

仕様が私の感覚にはそぐわないが、解決策はわかったのでひとまずよしとしよう。