【发布时间】:2019-02-26 05:30:54
【问题描述】:
我们有一个模块,其中包含 log4j.properties 和其他文件。并且有一个独立的模块依赖于第一个模块(重新对齐)。因此,我们将第一个模块制作为 jar 文件并将其放在第二个模块(Reasign)的 WEB-INF/lib 文件夹中。我们正在 Liberty 服务器中运行这些模块。但是我们仍然得到如下的 File Not found 异常,
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.properties 而不是将其作为文件加载吗?看起来您正在自动扩展应用程序,但最终会将应用程序文件放在不同的位置 - 对于 Liberty 来说更容易加载,但对于用户来说并不总是很容易找到。我建议禁用自动扩展或通过以下方式查找 log4j.properties 文件: URL url = myAppObject.getClass().getResource("r_resources/log4j.properties"); HTH,安迪
-
PropertyConfigurator.configure(this.getClass().getResource("/r_resources/" + RealignBeans.LOG4J_PROPERTIES).getPath()); System.out.println("******************加载log4j重新对齐****************"+this.getClass( ).getResource("/r_resources/" + RealignBeans.LOG4J_PROPERTIES).getPath()); PropertyConfigurator.configure(this.getClass().getResource("/r_resources/" + RealignBeans.BWLOG_CLIENT_BOB_LCF).getPath()); System.out.println("******************加载log4j重新对齐****************"+this.getClass( ).getResource("/r_resources/" + RealignBeans.BWLOG_CLIENT_BOB_LCF).getPath());
-
以上是我们当前正在抛出错误的代码
-
当我们将 autoexpand 属性更改为“false”时,我们会发现所有配置都找不到文件。我们是否可以从 server.xml 中删除 autoexpand 属性?
-
啊 - 问题是 PropertyConfigurator.configure() 方法有一个字符串参数(配置文件的路径),而不是一个 URL。 URL 会更好,因为它可以处理文件在存档(JAR、WAR、...)中的情况,其中指示文件系统上路径的字符串不能 - 注意“!”在路径中的 Realignment.jar 之后。这表明文件在 jar 中的位置。如果配置器可以接受 URL,则传入从 getResource 返回的 URL。如果没有,您可以考虑将资源放在可以直接在文件系统上读取的共享库中。
标签: log4j websphere-liberty open-liberty