2012-12-13 4 views
6

logback.groovyでgroovyで設定されたログバックを使用することはできません。grobackでlogback.groovy経由で設定されたlogbackの使用方法

私もlogback設定ファイルをコンパイルするgroovy FooBar.groovyグルーヴィーな試みを実行して、私のスクリプトが動作しないときのディレクトリに私は、私はしFooBar.groovy例えばというスクリプトファイルとファイルlogback.groovy を持っている場合logback(logback.xml)のデフォルトのxml構成ファイルにフォールバックします。

どうすればこのようにすることができますか? groovy somefiles.groovyを呼び出して、groovyをlogback.groovyを無視するように設定できますか?あなたの問題のための助け

+1

スクリプトはどのように機能しませんか?理由を説明してください。私は適切な解決策は、あなたのスクリプトを働かせて、.xml設定にフォールバックさせることではないと思います。 – Archer

答えて

11

理由で

おかげでlogback設定ファイルをコンパイルしてはならないということです。実行時にLogBackからGroovyShellまたは同様のメカニズムを介して読み込まれます。

解決方法は、プロジェクトの設定によって異なります。

最初のファイルがsrc/main/groovy/Test.groovy次のとおりです:あなたはこのプロジェクトのためのソリューションは、MavenのStandard Directory Layout以下Gradleでビルドができます以下の

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"]) 

私はGradleのビルドを省略しましたファイル(build.gradle)。

src/main/groovyのすべてのファイルがコンパイルされ、src/main/resourcesのすべてがクラスパスに含まれていることが標準のディレクトリレイアウトによって保証されます。そのため、LogBackは実行時にそのファイルを見つけることができます。

更新:問題を十分に慎重に読まなかった。両方のファイルが同じディレクトリにあり、私がgroovy Test.groovyで起動すると、問題を解決できませんでした。私はこれが不可能だと思う。 groovyコマンドは常に、現在のディレクトリと指定されたクラスパス内のすべてのGroovyファイルをコンパイルします。

+0

私は正しいと思いますが、両方のファイルが同じディレクトリにある場合はこの状況を管理することはできません。最初の部分はgroovyとlogbackの設定ファイルをgroovy dslで使用する正しい方法を記述しているためです。 – res1

関連する問題