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

时间:2013-05-23 14:26:02

标签: java logging configuration log4j log4j2

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

6 个答案:

答案 0 :(得分:18)

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

请注意,此类不属于公共API,因此 您的代码可能会因任何次要版本 而中断。

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分: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);

答案 3 :(得分:1)

对于log4j 2.12.1版,您可以找到如何重新配置​​log4j2 here

下面是一个例子

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

File file = new File("C:\\Path for Windows OS\\yourConfig.xml");
    
LoggerContext context = (LoggerContext) LogManager.getContext(false);
context.setConfigLocation(file.toURI());
    
Logger log  = LogManager.getLogger(YourClass.class);

在我看来,配置log4j2的方式随着新版本的改变而改变,因此您应该意识到这一点。

答案 4 :(得分:0)

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

  

-Dlog4j2.configurationFile = file:/home/atul/log4j2.properties

答案 5 :(得分:-1)

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

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

在每个课程中,您都可以获得以下记录器实例

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

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