我正在将Spring MVC应用程序从Spring 3.1升级到4.3,将Hibernate 3.6升级到5.2。我将在Wildfly 8中运行它。依赖关系由Maven管理。
Spring使用commons-logging,它查看应用程序的类路径并尝试选择合适的日志框架。就我而言,它似乎选择了错误的一个。我在我的pom.xml中包含了log4j,并检查了依赖关系层次结构,我可以看到jboss-logging不存在。以下是我收到的错误消息:
Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf
所以尽管我的项目中没有jboss日志记录,但是commons-logging正在某个地方找到并试图使用它,但是没有成功。经过一番搜索后,我在Wildfly找到了jboss-logging-3.1.4.GA.jar。
错误的原因是这是jboss-logging的旧版本。我在服务器上添加了一个较新的jar并编辑了module.xml以指向它,错误就消失了。这证明了commons-logging正在服务器上找到jboss-logging。
问题是我不想要jboss-logging,我想要log4j。如何强制commons-logging使用log4j并忽略服务器上的内容?
编辑:我按照了chrisharm链接,将这些行添加到standalone.xml文件中:
<add-logging-api-dependencies value="false"/>
<use-deployment-logging-config value="false"/>
我还将module.xml更改为再次指向旧jar,因为如果使用jboss,我宁愿看到错误。当我现在跑步时,我得到了这个:
Caused by: java.lang.NoClassDefFoundError: org/jboss/logging/Logger
这可能是朝着正确方向迈出的一步,因为现在Spring无法访问jboss-logging,但由于某种原因它仍在尝试使用它。
答案 0 :(得分:1)
https://docs.jboss.org/author/display/WFLY8/How+To#HowTo-HowdoIusemyownversionoflog4j%3F
如果您需要/想要包含您的log4j版本,则需要执行以下两个步骤。
这仅适用于登录部署。服务器日志将继续使用日志记录子系统配置。