9

我无法将通过 logback.groovy 配置的 logback 与 groovy 一起使用。

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

我怎样才能使它起作用?我可以调用groovy somefiles.groovy 并配置 groovy 以忽略 logback.groovy 吗?

谢谢您的帮助

4

2 回答 2

13

出现问题的原因是永远不应该编译 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 文件。

于 2013-02-19T15:52:25.070 回答
0

我在 Eclipse Greclipse 环境中遇到了同样的问题(并通过谷歌将此问题作为最佳问题参考)。它也很容易适应其他 Groovy 环境,并且基本原则/设置将适用。

以下是需要做/确保的事情:

Project -> Properties -> Java Build Path...

  • -> Source -> Add Folder或检查是否已正确设置
    • 所有相关文件必须在Included(eg (All)) 中而不是Excluded(eg (None)) 模式中
    • src/main/groovy/(应该包含你的 Groovy 类)
    • src/test/resources/logback.groovy直接在下面)
  • 确保在-> Output Folders之前src/main/resourcessrc/test/resources正确的logback.groovy(如果您也有一个用于测试)在正常运行中被采用

Project -> Properties -> Groovy Compiler -> Groovy Script Folders...

  • [ ] src/main/groovy/**/*.groovy(或您的课程的类似模式必须取消选中)
  • [x] src/main/resources/**/*.groovylogback.groovy(或必须检查正常的类似模式)
  • [x] src/test/resources/**/*.groovylogback.groovy(或必须检查您的测试的类似模式)

测试和正常logback.groovy 应该以这种方式工作。

结果,您应该会看到从源资源复制到目标文件夹的以下内容:

  • target/classes/logback.groovy
  • target/test-classes/logback.groovy

旁注:此外,如果您在 Eclipse 中的 ANT 中使用 Groovy,您所要做的就是Windows -> Preferences -> Ant -> Runtime -> Classpath -> Ant Home Entries -> Add Variable... -> ${project_classpath}并且logback.groovy也将正确应用 :)。(由于${project_classpath}似乎没有(总是)按上述顺序导出,我们不得不手动Add Folder -> target/classes移动到另一个上方以使其与正确的一起工作logback.groovy

于 2018-03-22T21:16:22.373 回答