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

Ary*_*rya 7 java eclipse log4j

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

PropertyConfigurator.configure("log4j.properties");
Run Code Online (Sandbox Code Playgroud)

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

Ric*_*tze 7

发生了什么

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

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

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

解决方案

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

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

替代

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

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

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