gpt4 book ai didi

JBoss EAP 6.4/7 - Spring Boot 应用程序的内部 log4j2.xml 配置未在控制台上打印

转载 作者:行者123 更新时间:2023-12-01 09:51:14 25 4
gpt4 key购买 nike

我查过类似的问题,但没有一个答案能真正解决问题。我有一个 Spring Boot 应用程序配置为使用 slf4j+log4j2(在 src/main/resources 中有一个内部 log4j2.xml 配置)。我在 JBoss EAP(6.4 和 7)上部署了这场 war ,并且可以看到来自 JBoss 启动的日志跟踪。问题是 log4j2 appender 不打印任何内容,无论是在控制台还是在文件 :

  • 在控制台中,只显示 jboss 日志记录( 我的应用程序跟踪中的每个 log.info() 都使用 jboss 日志记录格式 )。
  • A 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 文件 appender 打印正确。

  • 如何配置 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>

    更新

    问题与 JBoss 管理 SLF4J 的方式有关:
    org.slf4j.Logger slf4jLogger = org.slf4j.LoggerFactory.getLogger(PresupuestoController.class);
    org.apache.logging.log4j.Logger log4j2Logger = LogManager.getLogger(PresupuestoController.class);

    如果我运行 slf4jLogger.info("SLF4J!!!"); .它使用底层的 JBoss Logger 打印:
    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。

    最佳答案

    在为此苦苦挣扎之后,终于解决了这个问题:添加一个 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>

    现在 JBoss 日志继续工作,但也允许我在我的应用程序代码中使用 SFL4J + Log4j2。

    关于JBoss EAP 6.4/7 - Spring Boot 应用程序的内部 log4j2.xml 配置未在控制台上打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37317864/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com