如何指定Log4J 2.x配置位置?

问题描述 投票:15回答:5

有没有办法手动指定Log4J 2.x log4j2.xml文件位置(如Log4J 1.x中的DOMConfigurator),而不会弄乱类路径和系统属性?

java logging configuration log4j log4j2
5个回答
18
投票

您可以在#initialize(String contextName, ClassLoader loader, String configLocation)中使用静态方法here(请参阅source org.apache.logging.log4j.core.config.Configurator)。 (您可以为类加载器传递null。)

请注意,此类不是公共API的一部分,因此您的代码可能会破坏任何次要版本。

为了完整性,您还可以使用此系统属性指定配置文件的位置:

-Dlog4j.configurationFile=path/to/log4j2.xml

2
投票

在Windows中,请注意您需要使用带有log4j.configurationFile属性的URI

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

1
投票

使用LoggerContext允许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);

或者

LoggerContext.getContext().setConfigLocation(java.net.URI);

0
投票

您也可以像下面那样进行初始化

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

在每个类中,您可以获得如下的logger实例

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

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

0
投票

如果您使用的是log4j2,并且在log4j2.properties文件中定义了属性,请使用此属性。

-Dlog4j2.configurationFile =文件:/home/atul/log4j2.properties

© www.soinside.com 2019 - 2024. All rights reserved.