如何使用属性文件配置 log4j

2022-09-01 13:39:38

如何获取 log4j 来获取属性文件。

我正在编写一个Java桌面应用程序,我想使用log4j。在我的主要方法中,如果有这个:

   PropertyConfigurator.configure("log4j.properties");

log4j.properties文件位于同一目录中,当我打开Jar时。

然而,我得到这个错误:

log4j:错误 无法读取配置文件 [log4j.properties]。java.io.FileNotFoundException: log4j.properties(系统找不到指定的文件)

我做错了什么?


答案 1

我相信配置方法需要一个绝对的路径。无论如何,您也可以先尝试加载属性对象:

Properties props = new Properties();
props.load(new FileInputStream("log4j.properties"));
PropertyConfigurator.configure(props);

如果属性文件在 jar 中,则可以执行如下操作:

Properties props = new Properties();
props.load(getClass().getResourceAsStream("/log4j.properties"));
PropertyConfigurator.configure(props);

上面假设 log4j.properties 位于 jar 文件的根文件夹中。


答案 2

当您使用 PropertyConfigurator.configure(String configFilename) 时,它们是 log4j 库中的以下操作。

Properties props = new Properties();
FileInputStream istream = null;
try {
  istream = new FileInputStream(configFileName);
  props.load(istream);
  istream.close();
}
catch (Exception e) {
...

它在读取时失败,因为它从执行应用程序的当前目录中查找“Log4j.properties”。

它更改属性文件的读取部分的方式如何,如下所示,并将“log4j.properties”放在CLASSPATH设置到的目录上。

ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL url = loader.getResource("log4j.properties");
PropertyConfigurator.configure(url);

存在另一种将“Log4j.properties”放入jar文件中的方法。

jar xvf [YourApplication].jar log4j.properties