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?
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
Sous Windows, sachez que vous devez utiliser un URI avec la propriété log4j.configurationFile
.
-Dlog4j.configurationFile=file://C:\path\to\log4j2.xml
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);
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);