我无法将 Log4j2 配置为从工作目录中的 XML 文件中读取配置。
我正在尝试设置系统属性,如文档所述:
Log4j 将检查"log4j.configurationFile"系统属性,并且, 如果设置,将尝试使用 与文件扩展名匹配的配置工厂
使用 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 放入目录来将 XML 添加到我的类路径src
此配置才有效。我想通过在工作目录中编辑XML文件来允许编译后的lightweid配置。
使用的依赖项:
-
log4j-core-2.0-beta9.jar
-
log4j-api-2.0-beta9.jar
-
log4j-slf4j-impl-2.0-beta9.jar
-
slf4j-api-1.7.5.jar
效果很好。
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);
在 main 方法所在的类中,因为静态字段首先初始化。
还将起作用的是以下内容
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");
}
}
但是,您依赖于静态字段初始化执行的顺序。