web-dev-qa-db-fra.com

Définition du chemin logback.xml par programme

Je sais que je peux définir le chemin logback.xml comme ceci:

Spécifier l'emplacement du fichier de configuration par défaut en tant que propriété système

Vous pouvez spécifier l'emplacement du fichier de configuration par défaut avec une propriété système nommée "logback.configurationFile". La valeur de cette propriété peut être une URL, une ressource sur le chemin de classe ou un chemin vers un fichier externe à l'application.

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

mais comment puis-je le faire dans le code?

39
shabby

Vous pouvez utiliser:

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

Mais cela devrait se produire avant que le logback ne soit chargé, c'est-à-dire quelque chose comme:

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

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

Note: je ne l'ai pas testé mais ça devrait marcher.

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
Luca Basso Ricci

la modification des variables d’environnement peut ne pas toujours être réalisable ..__ Pour le faire correctement, reportez-vous au manuel de journalisation:

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

11
Amin Abbaspour

Je veux juste partager ce que j'ai fait à la fin avec une application Jersey-Spring:

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(); }
    }
}

Je dois aussi ajouter que j'ai dû déménager 

<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>

à partir de l'exécution (projet parent dans mon cas) à compiler.

2
sschrass

Inclure un autre fichier XML de journalisation pour changer le chemin d'accès dans logback-spring.xml

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

ajouter des données dans inclus tags dans logback.xml

0
Himanshu Soni