問題の理由は、logback 構成ファイルをコンパイルしてはならないことです。GroovyShell
実行時に、または同様のメカニズムを介して LogBack から読み取られます。
解決策は、プロジェクトの設定によって異なります。以下に、Maven標準ディレクトリ レイアウトに従ってGradleを使用してプロジェクトをビルドするためのソリューションを示します。
最初のファイルは次のsrc/main/groovy/Test.groovy
とおりです。
import org.slf4j.Logger
import org.slf4j.LoggerFactory
class Test {
static Logger LOG = LoggerFactory.getLogger(Test.class)
static void main(String[] args) {
LOG.debug("Test")
}
}
2 番目のファイルは次のsrc/main/resources/logback.groovy
とおりです。
import static ch.qos.logback.classic.Level.INFO
import static ch.qos.logback.classic.Level.DEBUG
import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.core.ConsoleAppender
appender("CONSOLE", ConsoleAppender) {
encoder(PatternLayoutEncoder) {
pattern = "%-4relative [%thread] - %msg%n"
}
}
root(DEBUG, ["CONSOLE"])
Gradle ビルド ファイル ( build.gradle
) は省略しました。
src/main/groovy
標準のディレクトリ レイアウトでは、 のすべてのファイルがコンパイルされ、 のすべてがsrc/main/resources
クラス パスに含まれることが保証されます。そのため、LogBack は実行時にそのファイルを見つけることができます。
更新:問題を十分に注意深く読んでいませんでした。両方のファイルが同じディレクトリにあり、groovy Test.groovy
. これは不可能だと思います。groovy コマンドは、現在のディレクトリと指定されたクラスパスにあるすべての groovy ファイルを常にコンパイルします。