logbackで設定を記述する時の注意事項等。続き。
昨日は、どうも古いlogbackを使っていたお陰で、
現状のマニュアルどうりにlogbackが動いてくれなかった訳で。
今度は最新版使うよ。
随分バージョンアップしてるね。
昨日と全く同じ設定ファイルを書くんじゃ、アンマリなんで、
今度はもう少し手の込んだ設定ファイルにしてみるよ。
今日は設定用のXMLファイルを2本用意しる。
<configuration> <include resource="appenders.xml"/> <logger name="aa.bb.cc" additivity="false" level="INFO"> <appender-ref ref="STDOUT4" /> </logger> <logger name="aa.bb" level="DEBUG"> <appender-ref ref="STDOUT3" /> </logger> <logger name="aa" level="INFO"> <appender-ref ref="STDOUT2" /> </logger> <root level="ERROR"> <appender-ref ref="STDOUT1" /> </root> </configuration>
- appenders.xml
<included> <appender name="STDOUT1" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>STDOUT1 %d{HH:mm:ss.SSS} %-5level %logger{10} - %msg%n</Pattern> </layout> </appender> <appender name="STDOUT2" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>STDOUT2 %d{HH:mm:ss.SSS} %-5level %logger{20} - %msg%n</Pattern> </layout> </appender> <appender name="STDOUT3" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>STDOUT3 %d{HH:mm:ss.SSS} %-5level %logger{20} - %msg%n</Pattern> </layout> </appender> <appender name="STDOUT4" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>STDOUT4 %d{HH:mm:ss.SSS} %-5level %logger{20} - %msg%n</Pattern> </layout> </appender> </included>
こんな感じ。
昨日と違うポイントは、
- includeタグ
- resource属性を使うとクラスローダから対象リソースを読む。
- file属性を使うと、ファイルシステムから対象リソースを読む。
- url属性を使うと、URLをopenStreamして対象リソースを読む。
- loggerタグやrootタグで、level属性を使用しちる。
- 古いlogbackだと、level属性が使えなくて子要素としてlevelタグを書かなきゃいけなかったけど、
新しいのを使えば、level属性でおk。
勿論古い書き方もおk。
- 古いlogbackだと、level属性が使えなくて子要素としてlevelタグを書かなきゃいけなかったけど、
includeタグで指定する対象リソースは、
includedタグの子要素として、設定を記述するトコロがポイントだに。
動かす為のJavaのコードは、昨日と一緒。
public class Main { public static void main(String[] args) { Logger bb = LoggerFactory.getLogger("aa.bb"); Logger cc = LoggerFactory.getLogger("aa.bb.cc"); Logger dd = LoggerFactory.getLogger("aa.bb.cc.dd"); Logger[] ary = { bb, cc, dd }; for (Logger l : ary) { l.debug("x"); l.info("y"); l.error("z"); } } }
実行結果は、昨日と設定を微妙に変えているんで、ちょっと違ってでてるます。
STDOUT3 18:37:15.994 DEBUG aa.bb - x STDOUT2 18:37:15.994 DEBUG aa.bb - x STDOUT1 18:37:15.994 DEBUG aa.bb - x STDOUT3 18:37:16.010 INFO aa.bb - y STDOUT2 18:37:16.010 INFO aa.bb - y STDOUT1 18:37:16.010 INFO aa.bb - y STDOUT3 18:37:16.010 ERROR aa.bb - z STDOUT2 18:37:16.010 ERROR aa.bb - z STDOUT1 18:37:16.010 ERROR aa.bb - z STDOUT4 18:37:16.010 INFO aa.bb.cc - y STDOUT4 18:37:16.010 ERROR aa.bb.cc - z STDOUT4 18:37:16.010 INFO aa.bb.cc.dd - y STDOUT4 18:37:16.010 ERROR aa.bb.cc.dd - z
まぁ、そんな感じ。
logbackを使ってログ出力しちるフレームワークは、
まぁ、何というか、ログ出力設定のサンプル的な意味合いも兼ねて、
include出来る設定ファイルを配布バイナリの一部に含めてあげると、使い易くなるかもね。