使用jboss-logging时应用程序应该使用log4j

时间:2017-01-18 16:42:14

标签: spring hibernate log4j apache-commons-logging jboss-logging

我正在将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,但由于某种原因它仍在尝试使用它。

1 个答案:

答案 0 :(得分:1)

https://docs.jboss.org/author/display/WFLY8/How+To#HowTo-HowdoIusemyownversionoflog4j%3F

如果您需要/想要包含您的log4j版本,则需要执行以下两个步骤。

  1. 使用add-logging-api-dependencies属性禁用向所有部署添加日志记录依赖项,并禁用use-deployment-logging-config属性或在jboss-deployment-structure.xml中排除日志记录子系统。
  2. 然后需要在部署中包含log4j库。
  3. 这仅适用于登录部署。服务器日志将继续使用日志记录子系统配置。