出现问题的原因是 logback 配置文件永远不应该被编译。它在运行时通过 LogBack 读取GroovyShell
或类似的机制。
解决方案取决于您的项目设置。接下来您将找到一个项目构建的解决方案Gradle http://www.gradle.org/跟随 Maven标准目录布局 http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html:
第一个文件是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 能够在运行时找到该文件。
Update: 没有仔细阅读你的问题。当两个文件位于同一目录中并且我通过以下方式启动它时,我无法解决问题groovy Test.groovy
。我认为这是不可能的。 groovy 命令始终编译当前目录和给定类路径中的所有 groovy 文件。