无法读取log4j.properties

问题描述 投票:0回答:1

我们有一个包含log4j.properties和其他文件的模块。还有一个独立的模块,它依赖于第一个模块(Realign)。所以我们将第一个模块作为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) 
log4j websphere-liberty open-liberty
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。

希望这会有所帮助,安迪

© www.soinside.com 2019 - 2024. All rights reserved.