log4j.properties没有可执行的JAR工作(log4j.properties not w

2019-07-30 22:45发布

我使用Eclipse和我已经把log4j.properties在项目目录中,我通过调用访问

PropertyConfigurator.configure("log4j.properties");

这工作正常在Eclipse中,但是当我提取项目作为一个可执行的JAR和另一台机器上运行它,我得到一个错误,指出它无法找到log4j.properties。 如何解决这个?

Answer 1:

发生了什么

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

一旦你的一切打包成一个罐子,并部署它 - 唯一的类文件和“资源”放入罐子。 资源非Java文件,这些文件的源代码树底下。

您复制到另一台机器的jar文件后,在属性文件不再左右。

解决方案

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

考虑将其放置在文件系统中的一些常见的区域:例如,在/tmp/log4j.properties或〜/ .myproject / log4j.properties。 您的代码将不得不进行调整,以寻找它,因此。

替代

复制属性文件到源树的根(/ SRC,是默认值)。 那么它应该是包装在瓶子里。 加载jar文件作为资源数据: PropertyConfigurator.configure(getClass().getResourceAsStream())

在这种情况下,你不能简单地编辑该文件来调整你的日志偏好。

多次逻辑将被写入,以确定是否一个属性文件是文件系统上,并且如果没有则通过此机制加载从罐子的缺省值。



Answer 2:

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

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



文章来源: log4j.properties not working in executable jar