如何使Log4J2在JBoss EAP 6.4中工作

时间:2018-12-13 05:31:13

标签: java java-ee jboss log4j log4j2

我已经看到了成功的在线实例,可以使Log4J2在JBoss EAP 6.x中工作

我的本​​地战争文件有特定情况(JBoss EAP 6.4,JDK8):

  1. 战争建立在Spring 3框架上,其中大多数日志记录由Apache Common Logging
  2. 进行
  3. 在战争中记录源代码是由Slf4J
  4. 进行的
  5. 但是,WEB-INF/lib中仍然存在Log4J 1.2中的一些内部依赖性,而不是slf4J

因此,我在项目下面添加了以下依赖项(仅列出了jar文件而不是冗长的pom xml):

### spring framework from jcl to slf4j
jcl-over-slf4j-1.7.25.jar

### slf4j to log4j 1.2 then to log4j2
slf4j-log4j12-1.7.25.jar
log4j-1.2-api-2.11.1.jar

### slf4j to log4j 2
slf4j-api-1.7.25.jar
slf4j-simple-1.7.25.jar
log4j-api-2.8.2.jar
log4j-core-2.8.2.jar
log4j-slf4j-impl-2.8.jar

我的计划是告诉EAP 6.4永远不要使用JBoss的任何日志记录模块,而要使用这场战争提供的任何内容,因此在jboss-deployment-structure.xml中,我创建以下元素

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
    <deployment>
        <exclude-subsystems>
            <subsystem name="logging" />
        </exclude-subsystems>
        <dependencies>
            <module name="oracle" />
        </dependencies>
        <exclusions>
            <module name="org.apache.log4j" />
            <module name="org.apache.commons.logging" />
            <module name="org.jboss.logging" />
            <module name="org.jboss.logging.jul-to-slf4j-stub" />
            <module name="org.jboss.logmanager" />
            <module name="org.jboss.logmanager.log4j" />
            <module name="org.slf4j" />
            <module name='org.slf4j.impl' />
            <module name='org.slf4j.jcl-over-slf4j' />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

当应用程序启动时,我可以看到以下提取在服务器日志中的信息

Adding resource "/C:/Windows/content/MyApp.war/WEB-INF/lib/jcl-over-slf4j-1.7.25.jar" to module deployment.MyApp.war:main

Adding resource "/C:/Windows/content/MyApp.war/WEB-INF/lib/slf4j-log4j12-1.7.25.jar" to module deployment.MyApp.war:main
Adding resource "/C:/Windows/content/MyApp.war/WEB-INF/lib/slf4j-api-1.7.25.jar" to module deployment.MyApp.war:main
Adding resource "/C:/Windows/content/MyApp.war/WEB-INF/lib/slf4j-simple-1.7.25.jar" to module deployment.MyApp.war:main

Adding resource "/C:/Windows/content/MyApp.war/WEB-INF/lib/log4j-1.2-api-2.11.1.jar" to module deployment.MyApp.war:main
Adding resource "/C:/Windows/content/MyApp.war/WEB-INF/lib/log4j-api-2.8.2.jar" to module deployment.MyApp.war:main
Adding resource "/C:/Windows/content/MyApp.war/WEB-INF/lib/log4j-core-2.8.2.jar" to module deployment.MyApp.war:main
Adding resource "/C:/Windows/content/MyApp.war/WEB-INF/lib/log4j-slf4j-impl-2.8.jar" to module deployment.MyApp.war:main

关于登录服务器日志的信息不多,没有错误。

但是,无论我如何配置日志附加器(ROLConsole),都不会生成log4J日志。我使用FileAppender,但没有生成日志文件。

我不认为这是由log4J配置问题引起的,因为相同的war文件具有相同的log4J2.xml,日志记录输出在Tomcat 8中很好

我该如何解决这个问题,至少可以成功记录应用程序输出。

1 个答案:

答案 0 :(得分:0)

您的依赖项中有多个SLF4J绑定:

  1. slf4j-simple-1.7.25.jar
  2. slf4j-log4j12-1.7.25.jar
  3. log4j-slf4j-impl-2.8.jar

操作1::删除slf4j-simple,然后选择slf4j-log4j12log4j-slf4j-impl中的一个。

除此之外,log4j的两个API依赖项看起来很可疑:

  1. log4j-1.2-api-2.11.1.jar
  2. log4j-api-2.8.2.jar

操作2:,因为您使用的是log4j的实现版本2.8.2,所以删除log4j-1.2-api-2.11.1.jar。