2015-06-19 13 views
9

Ich hätte gerne eine logback.xml-Datei für die Produktion und eine andere mit anderen Parametern in meiner Staging-Umgebung. Mein Code kann automatisch zur Laufzeit wissen, ob er auf Produktion oder Laufzeit läuft. Gibt es eine Möglichkeit, die Logback-Konfigurationsdatei zur Laufzeit zu setzen?Wie konfiguriere ich die Logback-Konfigurationsdatei zur Laufzeit?

+0

Benutzt du Frühling? – John

+0

nein! Einfaches altes Java. – poiuytrez

Antwort

9

Methode 1: Laden von verschiedenen Dateien

Sie können zwei verschiedene Konfigurationsdateien halten und die Datei für die jeweilige Umgebung mit JoranConfiguratior#doConfigure beim Start der Anwendung laden.

Siehe http://logback.qos.ch/manual/configuration.html#joranDirectly. Beispielcode auch von dort mit Modifikationen für Ihren Fall genommen:

public class MyApp3 { 
    final static String STAGING_CONFIGURATION = "/path/to/statging.xml"; 
    final static String PRODUCTION_CONFIGURATION = "/path/to/production.xml"; 

    final static Logger logger = LoggerFactory.getLogger(MyApp3.class); 

    public static void main(String[] args) { 
    // assume SLF4J is bound to logback in the current environment 
    LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); 

    // determine environmental specific configuration path 
    final String path = isProdcution() ? PRODUCTION_CONFIGURATION : STAGING_CONFIGURATION; 

    try { 
     JoranConfigurator configurator = new JoranConfigurator(); 
     configurator.setContext(context); 
     // Call context.reset() to clear any previous configuration, e.g. default 
     // configuration. For multi-step configuration, omit calling context.reset(). 
     context.reset(); 
     configurator.doConfigure(path); 
    } catch (JoranException je) { 
     // StatusPrinter will handle this 
    } 
    StatusPrinter.printInCaseOfErrorsOrWarnings(context); 

    logger.info("Entering application."); 

    Foo foo = new Foo(); 
    foo.doIt(); 
    logger.info("Exiting application."); 
    } 
} 

Natürlich Code der richtigen Dateinamen für das Erhalten werden kann angepasst Ihre Bedürfnisse paßt. Darüber hinaus gibt es einige überladene doConfigure Methoden (http://logback.qos.ch/apidocs/ch/qos/logback/core/joran/GenericConfigurator.html#doConfigure%28java.io.File%29), die auch InputStreams, Dateien und URLs nimmt.

Methode 2: Verwenden conditionals in einer Datei

Wenn Sie Ihre Umgebung mit logbag Build in Eigenschaften oder Systemeigenschaften bestimmen können, können Sie bedingte Konfigurationen verwenden:

http://logback.qos.ch/manual/configuration.html#conditional

<!-- if-then form --> 
<if condition="condition for your production"> 
    <then> 
     ... 
    </then> 
    <else> 
     ... 
    </else> 
</if> 
+0

Danke für Ihre zweite Methode, ich hatte keine Ahnung, dass wir diese Art von Bedingungen hinzufügen können. Es ist übrigens ein kleiner Tippfehler in eurem ersten "" ... :) – ArnaudR

+0

behoben, danke :-) – flo