使用 JDK11 设置的 Wildfly 服务器中的日志记录问题
Posted
技术标签:
【中文标题】使用 JDK11 设置的 Wildfly 服务器中的日志记录问题【英文标题】:Logging issue in Wildfly server with JDK11 setup 【发布时间】:2021-08-15 20:18:10 【问题描述】:面临与登录 Java Web 应用程序的 Wildfly 部署相关的问题。 使用的 Wildfly 版本:wildfly-15.0.0
Web 应用程序具有 Spring MVC 配置。 Spring 框架版本是 4.3.1 并且使用 logback.xml 和 slf4j 配置日志记录。 应用程序的JDK 合规级别为 1.8,它被设置为在 Wildfly 上的 JDK11 上运行。
应用程序日志正在 Wildfly 服务器日志中打印。它应该打印在应用程序的 logback.xml 中提供的文件中
以下是为记录添加的Jars到应用程序的 WEB-INF/lib 文件夹中。
log4j-1.2.16.jar log4j-api-2.11.2.jar log4j-to-slf4j-2.11.2.jar logback-classic-1.2.3.jar logback-core-1.2.3.jar尝试在 $JBOSS_HOME/modules/system/layers/base/ 下的 Wildfly 服务器中添加一个模块,但没有成功。
还在 $JBOSS_HOME/standalone/configuration/standalone.xml 中的子系统“urn:jboss:domain:logging:6.0”中添加了以下配置
在此之后,应用程序日志将打印在适当的位置。但是,应用程序的自定义 jar 中的日志没有得到打印。既不在服务器日志中,也不在应用程序日志中。
相同的配置在 tomcat 9 中按预期工作。但似乎 logback.xml 没有在 Wildfly 中正确引导。 知道可能是什么问题吗?
【问题讨论】:
为什么你的 WAR 中有 logback 和 log4j 依赖? @KarlAlexander 在这种情况下没有任何区别,尝试删除 log4j 依赖项,但问题仍然存在。 【参考方案1】:默认情况下,WildFly 有它自己的 slf4j 绑定,它会写入服务器日志管理器。如果您想使用自己的日志管理器,则需要执行以下操作之一。
在jboss-deployment-structure.xml
中从您的部署中排除日志记录子系统
排除您要自己提供的日志记录依赖项,在您的情况下,它看起来像jboss-deployment-structure.xml
中的org.slf4j.api
、org.slf4j.impl
和org.apache.log4j
将日志记录子系统属性add-logging-api-dependencies
更改为false
。
更多详情请查看documentation。请注意,per-deployment logging 链接似乎已损坏,我们将对其进行修复。
【讨论】:
感谢您的及时回复。只是为了更新,前两个没有用。我已经尝试将日志记录子系统属性 add-logging-api-dependencies 添加为 false,在此更改后,应用程序自定义 jar 中的日志不会打印。例如ProjectA 在 /WEB-INF/lib 中有一个名为 'projectB.jar' 的 jar,那么 'projectB.jar' 的日志不会在任何地方打印。 您使用什么日志框架/外观?你似乎混合了 log4j、log4j2 和 slf4j。projectB.jar
使用什么?
slf4j 用作主应用程序 (projectA.war) 以及自定义 jar (projectB.jar) 中的日志框架
只要您以一种或另一种方式排除日志记录依赖项,就应该没有问题。如果它不起作用,您的部署中可能会遇到一些奇怪的 slf4j 绑定问题。如果不了解应用程序的更多信息,就很难说出问题所在。以上是关于使用 JDK11 设置的 Wildfly 服务器中的日志记录问题的主要内容,如果未能解决你的问题,请参考以下文章