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。


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出来る設定ファイルを配布バイナリの一部に含めてあげると、使い易くなるかもね。