如何使用logback.groovy和groovy配置的logback

res*_*es1 8 groovy logback

我无法使用groovy通过logback.groovy配置的logback.

如果在一个目录中我有一个脚本文件调用例如FooBar.groovy和文件logback.groovy当我运行groovy FooBar.groovy groovy尝试编译logback配置文件而且我的脚本不起作用时,我必须回退到 默认的xml配置用于logback的文件(logback.xml).

我怎样才能使这个工作?我可以调用groovy somefiles.groovy 并配置groovy来忽略logback.groovy吗?

谢谢您的帮助

Chr*_*ipp 12

您遇到问题的原因是永远不应编译回溯配置文件.它在运行时从LogBack通过GroovyShell或类似的机制读取.

解决方案取决于您的项目设置.下面您将找到一个使用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")
    }
}
Run Code Online (Sandbox Code Playgroud)

第二个文件是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"])
Run Code Online (Sandbox Code Playgroud)

我省略了Gradle构建文件(build.gradle).

标准目录布局保证src/main/groovy编译每个文件,而所有内容src/main/resources都包含在类路径中.因此LogBack能够在运行时找到该文件.

更新:没有仔细阅读您的问题.当两个文件都在同一目录中并且我通过它启动时,我无法解决问题groovy Test.groovy.我认为这是不可能的.groovy命令总是编译当前目录和给定类路径中的所有groovy文件.