home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Groovy/Logging/slf4j + logback (v1)

Groovy/Logging/slf4j + logback (v1)

Groovy / Logging / slf4j + logback (v1)
id: 1158 所有者: msakamoto-sf    作成日: 2013-03-09 22:33:52
カテゴリ: Groovy 

slf4j + logbackをGroovyで使うメモ。

logbackのサイト

公式ドキュメント重要。

スクリプトから使う

  • "log"を導入したいクラスに"@Slf4j"アノテーションを付けておきます。
  • "@Grab"でslf4j-apiとlogback-classicを指定すると動いてくれました。特に設定ファイルがない場合はDEBUGレベル以上でコンソールに出力。

slf4j1.groovy:

@Grapes([
@Grab(group='org.slf4j', module='slf4j-api', version='1.7.2'),
@Grab(group='ch.qos.logback', module='logback-classic', version='1.0.9'),
])
import groovy.util.logging.*

@Slf4j
class C1 {
    static void m1() {
        println 'from m1:'
        log.trace 'trace2'
        log.debug 'debug1'
        log.info  'info1'
        log.warn  'warn1'
        log.error 'error1'
    }
}

@Slf4j
class C2 {
    static void m2() {
        println 'from m2:'
        log.trace 'trace2'
        log.debug 'debug2'
        log.info  'info2'
        log.warn  'warn2'
        log.error 'error2'
    }
}

C1.m1()
C2.m2()

実行結果:

$ groovy slf4j1.groovy
from m1:
22:41:04.295 [main] DEBUG C1 - debug1
22:41:04.299 [main] INFO  C1 - info1
22:41:04.301 [main] WARN  C1 - warn1
22:41:04.301 [main] ERROR C1 - error1
from m2:
22:41:04.408 [main] DEBUG C2 - debug2
22:41:04.408 [main] INFO  C2 - info2
22:41:04.408 [main] WARN  C2 - warn2
22:41:04.408 [main] ERROR C2 - error2

logback.groovyを使う

logback.groovyをclasspathのパッケージ無しで参照できるようにしておきます。
mavenとかgradle使ってるなら、"src/main/resources/"とかの直下に置いておけば、パッケージングとか実行されるときにclasspathのパッケージ無しで指定できるようにしてくれるはずです。

スクリプト実行するなら、実行するスクリプトと同じ場所に置いておけば多分大丈夫。

シンプルなlogback.groovy:

import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.core.ConsoleAppender
import static ch.qos.logback.classic.Level.*

appender('CONSOLE', ConsoleAppender) {
    encoder(PatternLayoutEncoder) {
        pattern = "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n"
    }
}

root(TRACE, ['CONSOLE'])

これと上で紹介したslf4j1.groovyを実行する場合は、system class loaderとしてgrabを動かす必要があります。ということで、slf4j1.groovyの"@Grab"の前に以下の様な"@GrabConfig"を追加します。

@GrabConfig(systemClassLoader=true)
@Grapes([
@Grab(group='org.slf4j', module='slf4j-api', version='1.7.2'),
@Grab(group='ch.qos.logback', module='logback-classic', version='1.0.9'),
])
import groovy.util.logging.*

...

slf4j1.groovyを実行してみると、TRACEレベルが有効になり、日付が入るようになりました(=用意したlogback.groovyがちゃんとロードされてます)。

$ groovy slf4j1.groovy
from m1:
2013-03-09 22:44:09.107 [main] TRACE C1 - trace2
2013-03-09 22:44:09.113 [main] DEBUG C1 - debug1
2013-03-09 22:44:09.114 [main] INFO  C1 - info1
2013-03-09 22:44:09.115 [main] WARN  C1 - warn1
2013-03-09 22:44:09.116 [main] ERROR C1 - error1
from m2:
2013-03-09 22:44:09.260 [main] TRACE C2 - trace2
2013-03-09 22:44:09.260 [main] DEBUG C2 - debug2
2013-03-09 22:44:09.260 [main] INFO  C2 - info2
2013-03-09 22:44:09.260 [main] WARN  C2 - warn2
2013-03-09 22:44:09.260 [main] ERROR C2 - error2

GroovyServとの組み合わせでの注意点

  • logback.groovyを使うには、スクリプト側でsystem class loaderとしてgrabを動かす必要がある = logback.groovyもsystem class loader経由で読み込まれる影響か、一度読み込まれてしまうと、groovyserver側のインスタンスにキャッシュされる影響か(よくわからないけど)、logback.groovyを変更して再実行しても変更が反映されず、最初に読み込まれた時の設定のままになってしまう。
    • work arround : groovyserver -r でgroovyserver側のJVMを再起動します。

その他の参考情報



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2013-03-09 22:55:26
md5:2ceae0e90c751f9bf381691067ceeca0
sha1:69d6f6378cd36a7027118ea4ed0526b1ddd654af
コメント
コメントを投稿するにはログインして下さい。