ロガーの名前階層(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 件のコメント:
コメントを投稿