无法读取 log4j.properties



我们有一个模块,其中包含log4j.properties和其他文件。并且有一个单独的模块依赖于第一个模块(重新对齐(。因此,我们将第一个模块制作为jar文件,并将其放在第二个模块(Reasign(的WEB-INF/lib文件夹中。我们正在 Liberty 服务器中运行这些模块。但是我们仍然得到"找不到文件"异常,如下所示,

log4j:ERROR Could not read configuration file
[file:/metlife/runtime/installed/wlp/usr/servers/bobr/apps/expanded/bobr.ear/BOBReassignmentWeb.war/WEB-INF/lib/Realignment.jar!/r_resources/log4j.properties].
[9/12/18 8:28:51:591 EDT] 000002de SystemErr                                                    R java.io.FileNotFoundException: 
file:/metlife/runtime/installed/wlp/usr/servers/bobr/apps/expanded/bobr.ear/BOBReassignmentWeb.war/WEB-INF/lib/Realignment.jar!/r_resources/log4j.properties (No such file or directory) 

看起来您的PropertiesConfigurator类正在采用文件路径(作为字符串(。 如果你使用一个 URL,我认为这会起作用 - 这样,你会得到一个 JAR URL,其中包括 JAR(或 WAR、EAR 等(存档的路径和 JAR 内的路径。如果您可以控制PropertiesConfigurator代码,那么我建议您更改它,以便它通过URL加载文件。

如果这不是一个选项,那么您可以提取属性文件并将它们直接放在文件系统上。 例如,您可以在服务器目录中创建一个目录(例如,我们将其称为log4jProps(。 然后,您可以在服务器配置(server.xml(中创建一个共享库,如下所示:

<library id="log4j.props">
<fileset dir="${server.config.dir}/log4jProps" includes="r_resources/*properties"/>
</library>

然后更新应用程序配置以将此库用作公共共享库:

<application id="myApp" name="myApp" location="myApp.war"...>
<classloader commonLibraryRef ="log4j.props" />
</application>

为了更好地衡量,您可能应该从应用程序存档中删除属性文件 - 这样它们就不会从那里加载,然后像现在一样丢弃 PropertiesConfigurator。

希望这有帮助, 安 迪

最新更新