2012-12-13 4 views
6

konfiguriert ist, kann ich logback nicht verwenden konfiguriert über logback.groovy mit groovy.wie logback über logback.groovy mit groovy

Wenn in einem Verzeichnis i eine Skriptdatei zum Beispiel FooBar.groovy und die Datei logback.groovy genannt haben wenn ich groovy FooBar.groovy groovy versucht laufen auch die logback Konfigurationsdatei erstellt und mein Skript nicht funktioniert, ich muss Fallback auf die Standard-XML-Konfigurationsdatei für Logback (logback.xml).

Wie kann ich dies zu arbeiten? kann ich groovy somefiles.groovy aufrufen und groovy konfigurieren, um logback.groovy zu ignorieren?

Danke für die Hilfe

+1

Wie könnte es Skript funktioniert nicht? Erklären Sie den Grund. Ich denke, die richtige Lösung wäre, dass Ihr Skript funktioniert und nicht auf die XML-Konfiguration zurückgreift. – Archer

Antwort

11

Der Grund für die Probleme ist, dass die logback Konfigurationsdatei sollte nie kompiliert werden. Es wird zur Laufzeit von LogBack über GroovyShell oder einen ähnlichen Mechanismus gelesen.

Die Lösung hängt von Ihrer Projektkonfiguration ab. Nach Sie eine Lösung für ein Projekt bauen mit Gradle nach dem Maven Standard Directory Layout finden:

erste Datei ist src/main/groovy/Test.groovy:

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

zweite Datei ist 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"]) 

ich die Gradle weggelassen bauen Datei (build.gradle).

Das Standard-Verzeichnis-Layout garantiert, dass jede Datei in src/main/groovy kompiliert wird, während alles in src/main/resources im Klassenpfad enthalten ist. LogBack kann diese Datei zur Laufzeit finden.

Aktualisieren: Ich habe Ihr Problem nicht sorgfältig genug gelesen. Ich konnte das Problem nicht lösen, wenn sich beide Dateien im selben Verzeichnis befinden und ich es über groovy Test.groovy starte. Ich denke, das ist nicht möglich. Der groovy-Befehl kompiliert immer alle groovigen Dateien im aktuellen Verzeichnis und im angegebenen Klassenpfad.

+0

Ich denke du hast Recht, es ist nicht möglich, diese Situation zu verwalten, wenn beide Dateien im selben Verzeichnis sind. Ich markiere deine Frage als akzeptiert, weil der erste Teil eine richtige Methode zur Verwendung von groovy und einer Logback-Konfigurationsdatei in groovy dsl beschreibt. – res1