【发布时间】:2013-03-01 08:41:38
【问题描述】:
我使用 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中的classpath只有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'
}
【问题讨论】:
标签: groovy intellij-idea logback