logback0.9.11の設定ファイル

感想おまちしてます!

今回は、Chapter 3: Logback configuration with Joranを参考にlogbackの設定ファイルを見てみる。

スポンサーリンク

Configuration in logback

logbackでは設定をプログラムで書くこともできるし、xml形式で書くことも可能。また、log4jの設定からlogbackの設定へ「Log4j properties to Logback XML Translator」を使って変換することもできる。
すごいのがWebでできるということ。仕事で使うときは注意ですね。多分、ダウンロードしたパッケージに入ってんじゃないかな。
logbackは以下の順で設定をする。

  1. logback-test.xmlをクラスパス上から探す
  2. なければlogback.xmlをクラスパス上から探す
  3. なければ自動的にBasicConfiguratorを使って設定する

BasicConfiguratorはコンソールに出す設定となり、フォーマットは「%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} – %msg%n」でDEBUGレベルになる。
logback-test.xmlが「src/test/resources」にあるとすれば、Mavenはそれを使うらしい。テストの間、別名のファイルを使うこともできる。logback-test.xmlとlogback.xmlがあった場合、logback-test.xmlが使われる。

logback.xmlやlogback-test.xmlを使う

logback-test.xmlを作って「src/test/resources」においてみる。

<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - [test] %msg%n</Pattern>
</layout>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>

きちんと設定が使われた。

23:39:37.656 [main] DEBUG c.d.logging.logback.LogBackSamlpe - [test] Hello world.

以下の記述でlogbackの設定情報を表示できるが、

 // print internal state
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
StatusPrinter.print(lc);

設定ファイルが存在して、XMLフォーマットの場合、以下のようにconfigurationタグに属性を設定すれば、同じように設定情報が、ログのはじめに出力される。記述がなかったり、falseが記述されている場合は出力されない。

<configuration debug="true">

デフォルト設定をシステムプロパティに設定する場合

以下で可能。

java -Dlogback.configurationFile=/path/to/config.xml chapter3.MyApp1

Invoking JoranConfigurator directly

Joranってなんだ?
多分、デフォルトの設定ローダーの名前ぽい。logbackでは「JoranConfigurator」を呼び出して設定ファイルを呼び出す模様。直接呼び出したい場合は以下のように記述する。

 public static void main(String[] args) {
// assume logback is in use
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
try {
JoranConfigurator configurator = new JoranConfigurator();
configurator.setContext(lc);
// the context was probably already configured by default configuration
// rules
lc.shutdownAndReset();
configurator.doConfigure("D:/Study/workspace/LoggerTest/src/main/resources/logback.xml");
} catch (JoranException je) {
je.printStackTrace();
}
StatusPrinter.printIfErrorsOccured(lc);
logger.info("Entering application.");
logger.debug("fujihara.");
logger.info("Exiting application.");
}

ここではlogback.xmlを読み込んでいるが、logback-test.xmlがクラスパス上にあれば、そちらが先に読み込まれるらしい。logback-test.xmlでは「configuration debug=”true”」にして、logback.xmlではfalseにしても、logback-test.xmlのtrueがきいていた。
今回のコードはgoogle codeを参照のこと。