出现问题的原因是永远不应该编译 logback 配置文件。它在运行时通过GroovyShell
或类似机制从 LogBack 读取。
解决方案取决于您的项目设置。接下来,您将找到使用Gradle构建项目的解决方案,遵循 Maven标准目录布局:
第一个文件是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"])
我省略了 Gradle 构建文件 ( build.gradle
)。
标准的目录布局保证其中的每个文件都src/main/groovy
被编译,而其中的所有内容src/main/resources
都包含在类路径中。所以 LogBack 能够在运行时找到该文件。
更新:没有足够仔细地阅读您的问题。当两个文件都在同一个目录中并且我通过groovy Test.groovy
. 我认为这是不可能的。groovy 命令总是编译当前目录和给定类路径中的所有 groovy 文件。