2

Groovy アプリケーションにログインするために SLF4J と Logback を使用しているため、Groovy 構成で 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 から開始されたクラス パスとは異なり、使用可能な別のログバック構成ファイルがあるようです。しかし、IDEA のクラスパスは Java と gradle の依存関係のみです。私の意見では(ここから読んでください)、logbackは最初にlogback.groovyを探す必要があり、私のファイルが唯一のものであると確信しています。

次に、オンライン トランスレータを使用して、動作中の XML 構成を Groovy に変換しようとしました。構成はまったく同じですが、logback デバッグ オプションが失われていることに気付きました。

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

質問 2: Groovy 経由でログバック デバッグを有効にする方法を知っている人はいますか? (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'   
}
4

1 に答える 1

3

質問 1を解決logback.groovyしましたが、見つからなかったため、デフォルトの構成が読み込まれました。

IDEA でアプリケーションを実行したとき、メインクラスだけを実行しましたが、gradle run. 私は、Maven と Eclipse からの出力パスが同一である Eclipse からこれに慣れています。しかし、これは IDEA と Gradle には当てはまりません。IDEA の出力パスは ですがout\production\<project>、これはbuild\classes\mainGradle 用であり、IDEA はリソースをその出力パスにコピーしません。

今はgradle runIDEA 内で使用しているため、IDEA ビルドをバイパスします。

質問 2は実装されていません (Logback 1.0.11)。デバッグ用の DSL はありません。コードを参照してください。

于 2013-03-28T12:41:47.340 に答える