Gibt es eine Möglichkeit, den Speicherort der Log4J 2.x log4j2.xml
-Datei manuell anzugeben (wie DOMConfigurator
in Log4J 1.x), ohne mit dem Klassenpfad und den Systemeigenschaften zu experimentieren?
Sie können die statische Methode #initialize(String contextName, ClassLoader loader, String configLocation)
(siehe source here ) in org.Apache.logging.log4j.core.config.Configurator
. Verwenden. (Sie können den Klassenlader mit null übergeben.)
Beachten Sie, dass diese Klasse nicht Teil der öffentlichen API ist, alsoIhr Code kann bei einer untergeordneten Version beschädigt werden.
Der Vollständigkeit halber können Sie auch den Speicherort der Konfigurationsdatei mit dieser Systemeigenschaft angeben:
-Dlog4j.configurationFile=path/to/log4j2.xml
Beachten Sie in Windows, dass Sie einen URI mit der log4j.configurationFile
-Eigenschaft verwenden müssen
-Dlog4j.configurationFile=file://C:\path\to\log4j2.xml
Die Verwendung von LoggerContext ermöglicht 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);
oder alternativ
LoggerContext.getContext().setConfigLocation(Java.net.URI);
Wenn Sie log4j2 verwenden und Eigenschaften in der Datei log4j2.properties definiert sind, verwenden Sie diese.
-Dlog4j2.configurationFile = Datei: /home/atul/log4j2.properties
Sie können auch wie folgt initialisieren
ConfigurationSource source = new ConfigurationSource(new FileInputStream(log4j file Path));
XmlConfiguration xmlConfig = new XmlConfiguration(source);
Logger logger = (Logger) LogManager.getLogger();
logger.getContext().start(xmlConfig);
In jeder Klasse kannst du eine Logger-Instanz wie folgt erhalten
import org.Apache.logging.log4j.LogManager;
import org.Apache.logging.log4j.Logger;
private final Logger logger = LogManager.getLogger(ABC.class);