我已经看到了成功的在线实例,可以使Log4J2在JBoss EAP 6.x中工作
我的本地战争文件有特定情况(JBoss EAP 6.4,JDK8):
Apache Common Logging
Slf4J
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
关于登录服务器日志的信息不多,没有错误。
但是,无论我如何配置日志附加器(ROL
或Console
),都不会生成log4J日志。我使用FileAppender,但没有生成日志文件。
我不认为这是由log4J配置问题引起的,因为相同的war文件具有相同的log4J2.xml,日志记录输出在Tomcat 8
中很好
我该如何解决这个问题,至少可以成功记录应用程序输出。
答案 0 :(得分:0)
您的依赖项中有多个SLF4J绑定:
操作1::删除slf4j-simple,然后选择slf4j-log4j12或log4j-slf4j-impl中的一个。
除此之外,log4j的两个API依赖项看起来很可疑:
操作2:,因为您使用的是log4j的实现版本2.8.2,所以删除log4j-1.2-api-2.11.1.jar。