2012-12-13 34 views
6

我无法使用通过logback.groovy与groovy配置的logback。如何使用通过logback.groovy与groovy配置的logback

如果在一个目录下,我有打了个比方FooBar.groovy脚本文件和文件logback.groovy 当我运行groovy FooBar.groovy常规尝试编译的logback配置文件,也和我的脚本不工作,我必须回退到用于logback的默认xml配置文件(logback.xml)。

我该如何使这个工作?我可以拨打groovy somefiles.groovy并配置groovy忽略logback.groovy?

感谢您的帮助

+1

它怎么可能是脚本不起作用?解释原因。我认为正确的解决方案是让脚本工作,而不是回退到.xml配置。 – Archer

回答

11

原因你的问题是,的logback配置文件不应该编译。它在运行时从LogBack通过GroovyShell或类似的机制读取。

解决方案取决于您的项目设置。下面你会发现一个项目的解决方案建立与Gradle以下Maven的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"]) 

我省略了摇篮建设文件(build.gradle)。

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

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

+0

我认为你是对的,当两个文件都在同一个目录下时,我无法管理这种情况,因此我将你的问题标记为接受,因为第一部分描述了在groovy dsl中使用groovy和logback配置文件的正确方法。 – res1