JBoss EAP 6.4/7-Spring引导应用程序&x27;s内部log4j2.xml配置未在控制台上打印

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>

我查过类似的问题,但没有一个答案真正解决了这个问题。我有一个配置为使用slf4j+log4j2的Spring引导应用程序(在
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
    文件,但没有写入任何内容

以下是我所做的事情:

  • 我已经调试并检查了Spring Boot的
    Log4J2LoggingSystem
    是否正确初始化为
    classpath:log4j2.xml
    文件

  • 我的应用程序正在使用SLF4J,在调试时,我看到底层日志实现是JBoss的日志,而不是Log4j2

  • log4j2日志记录在Tomcat上正常工作

  • 在standalone.xml中,我删除了
    块。执行此操作后,控制台上只打印了一些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>
    
    如果我运行
    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>