it-swarm.com.de

Logback.xml-Pfad programmgesteuert festlegen

Ich weiß, dass ich den logback.xml-Pfad folgendermaßen einstellen kann:

Angabe des Speicherorts der Standardkonfigurationsdatei als Systemeigenschaft

Sie können den Speicherort der Standardkonfigurationsdatei mit einer Systemeigenschaft namens "logback.configurationFile" angeben. Der Wert dieser Eigenschaft kann eine URL, eine Ressource im Klassenpfad oder ein Pfad zu einer Datei außerhalb der Anwendung sein.

Java -Dlogback.configurationFile=/path/to/config.xml chapters.configuration.MyApp1

aber wie kann ich das im code tun?

39
shabby

Du könntest benutzen:

System.setProperty("logback.configurationFile", "/path/to/config.xml");

Es muss jedoch vor dem Laden von Logback geschehen, d. H.

class Main {
  static { System.setProperty("logback.configurationFile", "/path/to/config.xml");}
  private final Logger LOG = LoggerFactory.getLogger(Main.class);

  public void main (String[] args) { ... }
}

Hinweis: Ich habe es nicht getestet, aber es sollte funktionieren.

46
assylias
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.reset();
JoranConfigurator configurator = new JoranConfigurator();
InputStream configStream = FileUtils.openInputStream(logbackPropertiesUserFile);
configurator.setContext(loggerContext);
configurator.doConfigure(configStream); // loads logback file
configStream.close();
47

das Ändern von Umgebungsvariablen ist möglicherweise nicht immer realisierbar.

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

11
Amin Abbaspour

Ich möchte nur teilen, was ich am Ende mit einer Jersey-Spring-App gemacht habe:

MyWebApplicationInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(final ServletContext servletContext) throws ServletException {
        servletContext.addListener(new LogbackConfigListener());
        try { LogbackConfigurer.initLogging(servletContext.getRealPath("/WEB-INF/logback.xml")); }
        catch (FileNotFoundException | JoranException e) { e.printStackTrace(); }
    }
}

Ich muss auch hinzufügen, dass ich umziehen musste 

<dependency>
    <groupId>org.logback-extensions</groupId>
    <artifactId>logback-ext-spring</artifactId>
    <version>0.1.4</version>
    <scope>compile</scope></dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.3</version>
    <scope>compile</scope></dependency>

von der Laufzeit (in meinem Fall übergeordnetes Projekt) zu kompilieren.

2
sschrass

Fügen Sie eine andere Logback-XML hinzu, um den Pfad in logback-spring.xml zu ändern.

include resource = "/path/to/logback.xml"

daten hinzufügen in included tags in logback.xml

0
Himanshu Soni