2012-12-13 71 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