原因你的问题是,的logback配置文件不应该编译。它在运行时从LogBack通过GroovyShell
或类似的机制读取。
解决方案取决于您的项目设置。下面你会发现一个项目的解决方案建立与Gradle以下Maven的Standard Directory Layout:
第一个文件是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")
}
}
第二个文件是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"])
我省略了摇篮建设文件(build.gradle
)。
标准目录布局保证编译src/main/groovy
中的每个文件,而src/main/resources
中的所有内容都包含在类路径中。所以LogBack能够在运行时找到该文件。
更新:没有仔细阅读您的问题。当两个文件都在同一个目录下时,我无法解决问题,我通过groovy Test.groovy
启动它。我认为这是不可能的。 groovy命令总是编译当前目录和给定类路径中的所有groovy文件。
它怎么可能是脚本不起作用?解释原因。我认为正确的解决方案是让脚本工作,而不是回退到.xml配置。 – Archer