7

我正在使用 eclipse,我已将 log4j.properties 放在项目目录中,我通过调用来访问它

PropertyConfigurator.configure("log4j.properties");

这在 Eclipse 中运行良好,但是当我将项目提取为可执行 Jar 并在另一台机器上运行时,我收到一条错误消息,提示它找不到 log4j.properties。解决方案是什么?

4

2 回答 2

7

发生了什么

PropertyConfigurator.configure(String)从文件系统加载和读取文件。您的属性文件位于项目目录中,当您从 Eclipse 运行时,该目录将是“当前工作目录”。

一旦你将所有东西打包到一个 jar 中并部署它 - 只有类文件和“资源”被放置到 jar 中。资源是源代码树下的非 java 文件。

将 jar 文件复制到另一台机器后,属性文件不再存在。

解决方案

由于您的属性文件不是资源,因此您需要单独移动它:将它的副本放在文件系统上(以便可以编辑、更新等),在目标主机的当前工作目录中/运行环境。

考虑将它放在文件系统的某个公共区域:例如 /tmp/log4j.properties 或 ~/.myproject/log4j.properties。必须相应地调整您的代码以查找它。

选择

将属性文件复制到源树的根目录(/src,默认情况下)。然后应该将其打包在 jar 中。将 jar 文件中的数据作为资源加载:PropertyConfigurator.configure(getClass().getResourceAsStream()).

在这种情况下,您不能简单地编辑文件来调整您的日志记录首选项。

很多时候将编写逻辑来确定属性文件是否在文件系统上,如果没有,则通过此机制从 jar 加载默认值。

于 2012-08-12T02:10:03.500 回答
0
PropertyConfigurator.configure(ABC.class.getResourceAsStream("log4j.properties")) 

工作正常,但基本上你需要将Log4j属性文件放在源代码文件夹中(Java类旁边),或者你可以尝试放在外面并在getResourceAsStream()方法中给出正确的路径

于 2016-01-20T23:38:53.313 回答