我无法configure Log4j2 从工作目录中的XML文件中读取配置。
我试图设置系统属性,因为文档说:
Log4j将检查“log4j.configurationFile”系统属性, 如果设置,将尝试使用加载配置 与文件扩展名匹配的ConfigurationFactory
使用Main类静态初始化程序块,也在main
方法中,具有相对和绝对路径:
System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY,
"E:/log4j2.xml");
System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY,
"./log4j2.xml");
System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY,
"log4j2.xml");
同样使用"log4j.configurationFile"
代替XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY
,但没有任何效果。
此配置仅当我将XML添加到我的类路径中时才将其放入src
目录。我想通过编辑工作目录中的XML文件来允许编译后的lightweid配置。
使用的依赖项:
答案 0 :(得分:5)
对我来说很好。
public class Runtimeconfig {
public static void main(String args[]) {
System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "/home/peter/config/log4j2.xml");
new LoggedClass().logMe();
}
}
public class LoggedClass {
static Logger logger = LogManager.getLogger(LoggedClass.class);
public void logMe() {
logger.info("I'm logged!");
}
}
使用时会中断
static Logger logger = LogManager.getLogger(Runtimeconfig.class);
在主类方法所在的类中,因为静态字段首先被初始化。
以下
也将起作用public class Runtimeconfig {
static {
System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "/home/peter/config/log4j2.xml");
}
static Logger logger = LogManager.getLogger(Runtimeconfig.class);
public static void main(String args[]) {
new LoggedClass().logMe();
new Runtimeconfig().logger.info("I'm logged too");
}
}
但是你依赖于静态字段初始化执行的顺序。