logback.groovyで設定記述しようとしたらアレな事になった件について
Gradleを使っているせいでGroovyづいているのでログの出力設定もGroovyで書いてみたら、
どうもlogbackがバグってるぞなもし。って話。
具体的には何かっつうと、logback自体の動作ログを出すために、
OnConsoleStatusListenerってのを使うのだけど、それを普通に使っても特に何も出力されないのです。
何が足りないのかというと動作する為に呼出しが必要なContextが設定されず、
又、ライフサイクルメソッドであるstartが呼び出されないのです。
という訳で、logback-classic-1.0.1でlogback.groovyを使う際には以下の様なワークアラウンドが必要になります。
import static ch.qos.logback.classic.Level.* import ch.qos.logback.classic.encoder.PatternLayoutEncoder import ch.qos.logback.core.ConsoleAppender import ch.qos.logback.core.status.OnConsoleStatusListener statusListener(OnConsoleStatusListener) statusManager.getCopyOfStatusListenerList().each { // TODO workaround it.context = context it.start() } appender("CONSOLE", ConsoleAppender) { encoder(PatternLayoutEncoder) { pattern = "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" } } logger 'com.example', INFO, ['CONSOLE'] root WARN, ['CONSOLE']
イラっときたので、GitHubのリポジトリから、
Forkしてビルドしようとしたらテストがコケるし、eclipse:eclipseまでERRORでコケよるので面倒になりました。
それで気になってpull request見ると随分とマージされずに残っている。
僕の目下の目的とは随分ズレているのでちゃんとビルド出来る訳でもないものにコントリビュートする程の熱意がある筈もなく、
とりあえずワークアラウンドだけメモ書きしておこう、と相成りましたとさ。
そもそも、logbackをGroovyで設定するってのは余り使われてないんですかね?