web-dev-qa-db-fra.com

Comment spécifier l'emplacement de configuration de Log4J 2.x?

Existe-t-il un moyen de spécifier l'emplacement du fichier Log4J 2.x log4j2.xml manuellement (comme DOMConfigurator dans Log4J 1.x), sans modifier le chemin d'accès aux classes et les propriétés système?

14
Andrei Petrenko

Vous pouvez utiliser la méthode statique #initialize(String contextName, ClassLoader loader, String configLocation) (voir source ici ) dans org.Apache.logging.log4j.core.config.Configurator. (Vous pouvez passer la valeur null pour le chargeur de classes.)

Sachez que cette classe ne fait pas partie de l’API publique, doncvotre code peut rompre avec n’importe quelle version mineure} _ .

Pour être complet, vous pouvez également spécifier l'emplacement du fichier de configuration avec cette propriété système:

-Dlog4j.configurationFile=path/to/log4j2.xml
18
Remko Popma

Sous Windows, sachez que vous devez utiliser un URI avec la propriété log4j.configurationFile.

-Dlog4j.configurationFile=file://C:\path\to\log4j2.xml
2
Glenn McElhoe

Utiliser le LoggerContext permet de/ setConfigLocation .

File f = new File(this.logConfigFile);
URI fc = f.toURI();         
System.out.println("Loading logging config file: " + fc);
Logger l = (Logger) LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
l.getContext().setConfigLocation(fc);

ou bien

LoggerContext.getContext().setConfigLocation(Java.net.URI);
1
Luigi

Vous pouvez aussi initialiser comme ci-dessous

ConfigurationSource source = new ConfigurationSource(new FileInputStream(log4j file Path));
XmlConfiguration xmlConfig = new XmlConfiguration(source);
Logger logger = (Logger) LogManager.getLogger(); 
logger.getContext().start(xmlConfig); 

Dans chaque classe, vous pouvez obtenir une instance de journal comme ci-dessous  

import org.Apache.logging.log4j.LogManager;
import org.Apache.logging.log4j.Logger;

private final Logger logger = LogManager.getLogger(ABC.class);
0
KalyanM