Groovy中的Logback配置和Gradle / Idea中的不同类路径

时间:2013-03-01 08:41:38

标签: groovy intellij-idea logback

我正在使用SLF4J和Logback登录Groovy应用程序,因此我还通过Groovy configuration配置了logback。我的配置非常简单,看起来像:

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和root的顺序)。我发现从IDEA运行应用程序时根本没有加载配置。但是当我通过命令行启动它时(只执行gradlew run)一切正常。

问题1:有谁知道这里发生了什么?似乎从IDEA开始的类路径与从gradlew开始的类路径不同,并且还有另一个可用的logback配置文件。但IDEA中的类路径只是java和gradle依赖项。在我的选择中(只需从here阅读)logback应首先查找logback.groovy,我很确定我的文件是唯一的。

然后我尝试通过online translator将工作的XML配置转移到Groovy。配置是一样的,但我注意到logback调试选项丢失了:

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

问题2:有谁知道如何通过Groovy启用logback调试? (debug = true无效)

完整的Gradle构建文件:

// 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'   
}

1 个答案:

答案 0 :(得分:3)

我解决了问题1 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