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