log4j.properties在可执行jar中不起作用

时间:2012-08-12 01:55:31

标签: java eclipse log4j

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

来访问它
PropertyConfigurator.configure("log4j.properties");

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

2 个答案:

答案 0 :(得分:7)

发生了什么

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

将所有内容打包到jar中并进行部署后,只将类文件和“资源”放入jar中。资源是源树下的非java文件。

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

解决方案

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

考虑将其放在文件系统的某个公共区域中:例如在/tmp/log4j.properties或〜/ .myproject / log4j.properties中。 因此,您的代码必须进行调整以寻找它。

替代

将属性文件复制到源树的根目录(/ src,默认值)。然后将它包装在罐子里。将数据作为资源加载到jar文件中:PropertyConfigurator.configure(getClass().getResourceAsStream())

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

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

答案 1 :(得分:0)

PropertyConfigurator.configure(ABC.class.getResourceAsStream("log4j.properties")) 

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