logbackでJavaVM起動時にログレベルを指定する

·1 分で読めます

[permalink id=413]logback-test.xmlを使ってログレベルを変更する[/permalink]のエントリでlogback-test.xmlを用意すればこっちが先にロードされるので、logback.xmlより優先されていいよね的なことを書いた。で、こういうログレベルってJavaVM起動時に自由に指定できるとテストを実行する時によりいいよなぁと思ったので調べてみた。

Logback FAQ - How can I disable logging from the command line?に詳しく書いてある。前回の例を使うとこんな感じ。

%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n

で、下記のシンプルなサンプルコードをEclipseで実行する。実行する時の VM arguments に

-Droot-level=info

を指定するとログレベルは info になるし、何も指定しないと debug になる。

package net.lampetty.samples;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class LogbackSample1 {

private static final Logger log =

LoggerFactory.getLogger(LogbackSample1.class);

public static void main(String[] args) {

log.debug("debug message");

log.info("info message");

}

}

logback.xmlには変数置換(Variable Substitution)の機能があってShellみたく変数を埋め込める。${root-level:-debug} に書くと root-level が定義されていない場合は debug をデフォルト値として適用する、という意味(まさにShell)。

これでログレベルを自由自在に設定できる。

[tmkm-amazon]4797327030[/tmkm-amazon]