ロガーの名前階層(logger hierarchy)を確認するために簡単なコードを書いてみました。
package a.b.c.d;
import org.apache.log4j.Logger;
public class Main {
public static void main(String[] args) {
Logger logger = Logger.getLogger(Main.class);
logger.info("test!");
}
}
ロガーの設定はこんな感じ。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console1" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="package a : %m%n" />
</layout>
</appender>
<appender name="console2" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="package a.b : %m%n" />
</layout>
</appender>
<appender name="console3" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="package a.b.c : %m%n" />
</layout>
</appender>
<appender name="console4" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="package a.b.c.d : %m%n" />
</layout>
</appender>
<logger name="a">
<level value="info" />
<appender-ref ref="console1" />
</logger>
<logger name="a.b">
<level value="info" />
<appender-ref ref="console2" />
</logger>
<logger name="a.b.c">
<level value="info" />
<appender-ref ref="console3" />
</logger>
<logger name="a.b.c.d">
<level value="info" />
<appender-ref ref="console4" />
</logger>
</log4j:configuration>
これを実行すると、
package a.b.c.d : test! package a.b.c : test! package a.b : test! package a : test!となります。
a.b.c.d.Mainという名前のロガーを作ると、ログを出力する際にその親である
- a.b.c.d
- a.b.c
- a.b
- a
という名前のロガーにも「ログを出力せよ」という命令が伝わります。
もし自分より上の親たちには命令を伝えたくないという場合はadditivity属性をfalseにすればOKです。
<logger name="a"> <level value="info" /> <appender-ref ref="console1" /> </logger> <logger name="a.b"> <level value="info" /> <appender-ref ref="console2" /> </logger> <logger name="a.b.c" additivity="false"> <level value="info" /> <appender-ref ref="console3" /> </logger> <logger name="a.b.c.d"> <level value="info" /> <appender-ref ref="console4" /> </logger>とすると出力は、
package a.b.c.d : test! package a.b.c : test!のようになります。
0 件のコメント:
コメントを投稿