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

时间:2012-12-13 19:31:52

标签: 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吗?

感谢您的帮助

2 个答案:

答案 0 :(得分:12)

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

解决方案取决于您的项目设置。您将在Maven Gradle后面找到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"])

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

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

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

答案 1 :(得分:0)

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

以下是需要完成/确保的事项:

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

  • -> Source -> Add Folder或已正确检查已设置
    • 所有相关文件必须位于Included(例如(All)),而不是Excluded(例如(None))模式
    • src/main/groovy/ (应包含您的Groovy类)
    • src/test/resources/ logback.groovy直接位于其中)
  • 确保在-> Output Folderssrc/main/resourcessrc/test/resources之前,所以右logback.groovy(如果您还有一个用于测试)将在正常运行中进行< / LI>

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

  • [ ] src/main/groovy/**/*.groovy (或类似的类型必须取消选中)
  • [x] src/main/resources/**/*.groovy (或者必须检查普通logback.groovy的类似模式)
  • [x] src/test/resources/**/*.groovy (或者必须检查测试logback.groovy的类似模式)

以这种方式测试和正常logback.groovy should work

因此,您应该看到以下内容已从源资源复制到目标文件夹:

  • 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一起使用)