Javaでのコードでslf4j+logbackをロガーとして採用する際、Groovyで設定を書きたくてlogback.groovyを作ったのですが、そこに指定したログファイルにログが書き出されない現象に遭遇しました。
logback.groovyが設定ファイルであることを明示しました
画面にはログが表示されるので、ファイルに書き出されない理由は設定にあると思い込んでいたのですが、JVM引数としてlogback.groovyが設定ファイルである旨指定すると、わんさかメッセージが表示されるようになり見当違いであることが判りました。
実行時引数
-Dlogback.configurationFile=logback.groovy
Groovyクラスが無いと初期化エラー
最初のbuild.gradleでは、以降に示す初期化エラーになっているようでした。
最初のbuild.gradle
apply plugin: 'java'
repositories {
jcenter()
}
dependencies {
compile 'org.slf4j:slf4j-api:1.7.12'
compile 'ch.qos.logback:logback-classic:1.1.3'
compile 'ch.qos.logback:logback-core:1.1.3'
testCompile 'junit:junit:4.12'
}
エラー抜粋
Groovy classes are not available on the class path. ABORTING INITIALIZION.
どうやらエラーメッセージの通り、実行時にGroovyライブラリが必要なようで、依存ファイルにgroovy-allを追加したら期待通りログファイルに出力されるようになりました。
修正後のbuild.gradle
apply plugin: 'java'
repositories {
jcenter()
}
dependencies {
compile 'org.slf4j:slf4j-api:1.7.12'
compile 'ch.qos.logback:logback-classic:1.1.3'
compile 'ch.qos.logback:logback-core:1.1.3'
runtime 'org.codehaus.groovy:groovy-all:2.4.4' // 追加
testCompile 'junit:junit:4.12'
}