我有一个我开发的应用程序。目前,它与我的应用程序在同一个目录中部署了所有配置文件(包括log4j.properties
,我使用的一些外部库)。
所以,我有一个bin
目录,包含我的app.jar
,加上一些属性文件,以及一个带有我所有外部广告的lib
目录。外部jar在app.jar
的清单文件中指定的类路径中指定。
现在已经颁布的权力规定,新结构只有bin
dir,只有app.jar
,lib
dir处于同一级别(即{{1}外部jar的相对于../lib
的}}和配置文件的bin
目录。
很简单,我想 - 我将所有类路径路径从../etc
更改为./lib/<jarname>
,并将../lib/<jarname>
添加到类路径中。
问题是现在任何使用log4j的jar都不起作用 - 他们看不到../etc
文件 - 因为我怀疑log4j.properties
的类路径不会影响外部罐子的类路径(也许?),以前他们只是因为它在'。'而找到它。
有什么想法吗?
答案 0 :(得分:1)
只要log4j.properties位于类路径中,就可以将其放在任何位置。因此,正如@skaffman建议的那样,将log4j属性文件放在已存在于类路径中的etc目录中。
使用PropertyConfigurator的另一种方法是在运行应用程序时设置此syetm属性。
-Dlog4j.configuration=log4j.properties
答案 1 :(得分:0)
那么,问题是Log4J现在不再自动找到配置文件(log4j.properties)了吗?
据我所知,Log4J默认查找log4j.properties文件的类路径中的目录。尝试在JAR的清单文件中的类路径中添加../etc目录。
另请参阅Log4J手册中的Default Initialization Procedure,它解释了Log4J如何查找配置文件以及如何更改此配置文件。
答案 2 :(得分:0)
log4j.properties
必须位于默认包中,在您的情况下,可能意味着在该jar文件的根目录中的某个JAR文件中。
更好的解决方案是将其粘贴到etc
目录中,然后显式配置log4j以从该位置使用它。您可以使用PropertyConfigurator执行此操作 - 在您的应用程序启动时,通过文件名,URL,最适合您的方式调用它。