JBoss EAP 6.4/7-Spring引导应用程序&x27;s内部log4j2.xml配置未在控制台上打印
我查过类似的问题,但没有一个答案真正解决了这个问题。我有一个配置为使用slf4j+log4j2的Spring引导应用程序(在JBoss EAP 6.4/7-Spring引导应用程序&x27;s内部log4j2.xml配置未在控制台上打印,jboss,spring-boot,slf4j,log4j2,jboss-eap-6,Jboss,Spring Boot,Slf4j,Log4j2,Jboss Eap 6,我查过类似的问题,但没有一个答案真正解决了这个问题。我有一个配置为使用slf4j+log4j2的Spring引导应用程序(在src/main/resources中有一个内部log4j2.xml配置)。我在JBossEAP(6.4和7)上部署了这场战争,可以看到JBoss启动时的日志跟踪。问题是,log4j2 appender不打印任何内容,无论是在控制台上还是在文件上 <Configuration status="WARN"> <Appenders>
src/main/resources
中有一个内部log4j2.xml配置)。我在JBossEAP(6.4和7)上部署了这场战争,可以看到JBoss启动时的日志跟踪。问题是,log4j2 appender不打印任何内容,无论是在控制台上还是在文件上
<Configuration status="WARN">
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout ...
<RollingFile name="file"
filePattern="'.'%d{yyyy-MM-dd}"
fileName="c:\logs\out.log">
<PatternLayout
pattern="%d{yyyy-MM-dd'T'HH:mm:ss.SSS} - %c{1.} %5p - %m%n" />
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
</RollingFile>
<Logger name="org.springframework" level="info" additivity="false">
<AppenderRef ref="file" />
<AppenderRef ref="console" />
</Logger>
</Configuration>
- 在控制台中,只显示jboss日志(我的应用程序中的每个log.info()都使用jboss日志记录格式进行跟踪)
- 创建了
文件,但没有写入任何内容c:\logs\out.log
Log4J2LoggingSystem
是否正确初始化为classpath:log4j2.xml
文件
和
块。执行此操作后,控制台上只打印了一些jboss跟踪(但应用程序log.info()中没有打印),但log4j2文件appender打印正确<Configuration status="WARN">
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout ...
<RollingFile name="file"
filePattern="'.'%d{yyyy-MM-dd}"
fileName="c:\logs\out.log">
<PatternLayout
pattern="%d{yyyy-MM-dd'T'HH:mm:ss.SSS} - %c{1.} %5p - %m%n" />
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
</RollingFile>
<Logger name="org.springframework" level="info" additivity="false">
<AppenderRef ref="file" />
<AppenderRef ref="console" />
</Logger>
</Configuration>
如果我运行slf4jLogger.info(“SLF4J!!!”)代码>。它与底层JBoss记录器一起打印:
11:19:03,122 INFO [com.my.web.SomeController] (default task-2) SLF4J!!!
但是当我执行log4j2Logger.info(“LOG4J2!!!”)时代码>它按照我的log4j2.xml配置在控制台上打印:
11:19:03,668 INFO [stdout] (default task-2) 2016-05-19T11:19:03.663 c.m.w.SomeController INFO - LOG4J2!!!
根据要求,我必须在代码中使用SFL4J,因此我需要一种方法来强制它使用Log4j2而不是JBoss。我也很难让Log4j2在JBoss 6上工作
如果您运行的是web应用程序,则应将xml配置文件放在src/main/webapp/web-INF/log4j2.xml下
此外,还要确保您具有正确的依赖项,而且很明显,由于您设置为“警告”,所以您至少要记录警告/错误级别
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
org.apache.logging.log4j
log4japi
2.1
org.apache.logging.log4j
log4j型芯
2.1
org.slf4j
slf4j api
1.7.5
在努力解决这一问题后,以下是最终解决方案:向我的WEB-INF文件夹中添加一个jboss deployment structure.xml
文件,其中包含以下内容:
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name='org.slf4j' />
<module name='org.slf4j.impl' />
</exclusions>
</deployment>
</jboss-deployment-structure>
现在JBoss日志继续工作,但也允许我在应用程序代码中使用SFL4J+Log4j2。对于EAR应用程序(Spring MVC),我必须将JBoss-deployment-structure.xml放在META-INF中:
<jboss-deployment-structure>
<deployment>
<exclude-subsystems>
<subsystem name="logging"/>
</exclude-subsystems>
</deployment>
</jboss-deployment-structure>
感谢您的回答,我刚刚更新了这个问题,它似乎与SFL4J有关……在JBossAS 7.1中对我不起作用。你确定以上是唯一要做的事吗?你没有错过额外的步骤吗?
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.apache.commons.logging" />
<module name="org.apache.log4j" />
<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" />
</exclusions>
</deployment>
</jboss-deployment-structure>