2013-03-01 114 views
1

我正在使用SLF4J和Logback來登錄Groovy應用程序,因此我還通過Groovy configuration配置了logback。我的配置是很容易的,看起來像:Groovy中的Logback配置和Gradle/Idea中的不同類路徑

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 
import ch.qos.logback.core.status.OnConsoleStatusListener 

// always a good idea to add an on console status listener 
statusListener(OnConsoleStatusListener) 

// setting up appenders 
appender('CONSOLE', ConsoleAppender) { 
    encoder(PatternLayoutEncoder) { 
     pattern = "%d [%thread] %-5level %logger - %msg%n" 
    } 
} 

// setting up loggers 
logger("org.apache", INFO) 
root(DEBUG, ['CONSOLE']) 

不過,我來到成org.apache日誌消息也發生在不應根據上面的配置調試級別的問題(我也試圖改變順序looger和根)。我發現從IDEA運行應用程序時根本沒有加載配置。但是當我通過命令行啓動它時(只是執行gradlew run)一切正常。

問題1:有人知道這裏會發生什麼嗎?看起來從IDEA開始的類路徑與從gradlew開始的類路徑不同,並且還有另一個可用的logback配置文件。但IDEA中的類路徑只是java和gradle的依賴關係。在我的opionion中(剛剛從here中讀到)logback應該首先查找logback.groovy,並且我確信我的文件是唯一的。

然後我嘗試通過online translator將工作的XML配置轉換爲Groovy。這個配置是一樣的,但我注意到的logback調試選項丟失:

<configuration debug="true"> 
    ... 
</configuration> 

問題2:有誰知道如何通過Groovy中的logback啓用調試? (debug = true不工作)

完整的搖籃構建文件:

// Plugins 
apply plugin: 'groovy' 
apply plugin: 'application' 
apply plugin: 'idea' 

// Dependencies 
configure(allprojects) 
{ 
    ext.groovy = '2.1.0' 
    ext.slf4jVersion = '1.7.2' 
    ext.logbackVersion = '1.0.9' 
    ext.apacheFluentHc = '4.2.3' 
} 

repositories { 
    mavenCentral() 
} 

configurations { 
    compile.exclude module: 'commons-logging' 
} 

dependencies { 
    // Groovy 
    compile "org.codehaus.groovy:groovy-all:${groovy}:indy" 

    // Logging 
    compile "org.slf4j:slf4j-api:$slf4jVersion" 
    compile "ch.qos.logback:logback-classic:$logbackVersion" 
    compile "org.slf4j:jcl-over-slf4j:$slf4jVersion" 

    // Apache HttpClient 
    compile "org.apache.httpcomponents:fluent-hc:$apacheFluentHc" 
} 

// Java options 
sourceCompatibility = 1.7 
targetCompatibility = 1.7 
mainClassName = 'XXX' 

// Groovy options 
[compileGroovy.groovyOptions, compileTestGroovy.groovyOptions]*.with { 
    fork = true 
    optimizationOptions = [ indy: true, 'int': false] 
    encoding = 'UTF-8' 
} 

// Tasks 
task wrap(type:Wrapper, description:"create a gradlew") { 
    gradleVersion = '1.4' 
} 

回答

3

我解決問題,logback.groovy只是沒有找到,因此默認配置加載。

當我在IDEA中執行應用程序時,我只是運行主類而不是gradle run。我習慣了Eclipse的這種方式,Maven和Eclipse的輸出路徑是ident。但IDEA和Gradle並非如此。雖然IDEA的輸出路徑爲out\production\<project>,但Gradle中的路徑爲build\classes\main,而IDEA不會將資源複製到其輸出路徑。

現在我在IDEA中使用gradle run,因此繞過了IDEA構建。

問題2只是沒有實現(Logback 1.0.11),沒有用於調試的DSL,請參見code

相關問題