cod*_*ent 3 jboss slf4j log4j2 jboss-eap-6 spring-boot
我查找了类似的问题,但没有一个答案能真正解决问题。我有一个配置为使用slf4j + log4j2的Spring Boot应用程序(在中使用内部log4j2.xml配置src/main/resources)。我将这场战争部署在JBoss EAP(6.4和7)上,可以看到来自JBoss启动的日志跟踪。问题是log4j2附加程序只是不输出任何内容,无论是在控制台上还是在文件上:
在控制台中,仅显示jboss日志日志(我的应用程序跟踪中的每个log.info()都使用jboss日志记录格式)。
一个c:\logs\out.log 是创建的文件,但没有被写在上面。
这些是我所做的事情:
我已经调试并检查了Spring Boot的文件Log4J2LoggingSystem是否正确初始化classpath:log4j2.xml。
我的应用程序使用SLF4J,并且在调试时,我已经看到底层的日志记录实现是JBoss的日志记录,而不是Log4j2
log4j2日志记录在Tomcat上正常工作。
在standalone.xml中,我已删除<extension module="org.jboss.as.logging"/>和<subsystem xmlns="urn:jboss:domain:logging:3.0">块。完成此操作后,控制台上仅打印了一些jboss跟踪(但应用程序log.info()中没有任何跟踪),但是log4j2文件附加器可以正确打印。
如何配置JBoss以支持控制台上应用程序的log4j2.xml打印和文件?
log4j2.xml摘录:
<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>
Run Code Online (Sandbox Code Playgroud)
更新
问题与JBoss管理SLF4J的方式有关:
org.slf4j.Logger slf4jLogger = org.slf4j.LoggerFactory.getLogger(PresupuestoController.class);
org.apache.logging.log4j.Logger log4j2Logger = LogManager.getLogger(PresupuestoController.class);
Run Code Online (Sandbox Code Playgroud)
如果我跑步slf4jLogger.info("SLF4J!!!");。它使用底层的JBoss Logger打印:
11:19:03,122 INFO [com.my.web.SomeController] (default task-2) SLF4J!!!
Run Code Online (Sandbox Code Playgroud)
但是当我执行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!!!
Run Code Online (Sandbox Code Playgroud)
根据需要,我必须在代码中使用SFL4J,因此我需要一种方法来强制其使用Log4j2而不是JBoss。
经过努力,终于可以解决问题:将一个jboss-deployment-structure.xml包含以下内容的文件添加到我的WEB-INF文件夹中:
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name='org.slf4j' />
<module name='org.slf4j.impl' />
</exclusions>
</deployment>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)
现在,JBoss日志记录可以正常工作,但是还允许我在我的应用程序代码中使用SFL4J + Log4j2。
| 归档时间: |
|
| 查看次数: |
3613 次 |
| 最近记录: |