0

我们有一个模块,其中包含 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) 
4

1 回答 1

1

看起来您的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。

希望这会有所帮助,安迪

于 2018-09-17T21:30:58.847 回答