JBoss/Wildfly-AS内部重复格式化的记录器输出

JBoss/Wildfly-AS内部重复格式化的记录器输出,jboss,wildfly,log4j2,slf4j,Jboss,Wildfly,Log4j2,Slf4j,看来,我不能排除JBoss/Wildfly日志子系统 我有一个JavaEEEAR,希望将SLF4JAPI与log4J2实现一起使用 我的意图是禁用JBoss日志记录子系统,让我的slf4j log4j2实现处理日志记录。但我仍然得到重复处理stdout: 12:55:00820信息[stdout](螺纹-316)12:55:00信息 耳朵结构如下: d----- 03.07.2020 12:53 lib d----- 03.07.20

看来,我不能排除JBoss/Wildfly日志子系统

我有一个JavaEEEAR,希望将SLF4JAPI与log4J2实现一起使用

我的意图是禁用JBoss日志记录子系统,让我的slf4j log4j2实现处理日志记录。但我仍然得到重复处理stdout:

12:55:00820信息[stdout](螺纹-316)12:55:00信息

耳朵结构如下:

d-----       03.07.2020     12:53                lib
d-----       03.07.2020     12:53                META-INF
-a----       03.07.2020     12:53          13238 org.example-helloworld-ejb-1.0-SNAPSHOT.jar
-a----       03.07.2020     12:53        3598717 org.example-helloworld-web-1.0-SNAPSHOT.war
lib目录:

-a----       03.07.2020     12:53          26586 javax.annotation-javax.annotation-api-1.3.2.jar
-a----       03.07.2020     12:53          63679 javax.ejb-javax.ejb-api-3.2.2.jar
-a----       03.07.2020     12:53          28016 javax.transaction-javax.transaction-api-1.3.jar
-a----       03.07.2020     12:53         126898 javax.ws.rs-javax.ws.rs-api-2.1.1.jar
-a----       03.07.2020     12:53         292301 org.apache.logging.log4j-log4j-api-2.13.3.jar
-a----       03.07.2020     12:53        1714164 org.apache.logging.log4j-log4j-core-2.13.3.jar
-a----       03.07.2020     12:53          23590 org.apache.logging.log4j-log4j-slf4j-impl-2.13.3.jar
-a----       03.07.2020     12:53           1526 org.example-helloworld-config-1.0-SNAPSHOT.jar
-a----       03.07.2020     12:53           6071 org.example-helloworld-model-1.0-SNAPSHOT.jar
-a----       03.07.2020     12:53          41203 org.slf4j-slf4j-api-1.7.25.jar
META-INF目录:

-a----       03.07.2020     12:53          26586 javax.annotation-javax.annotation-api-1.3.2.jar
-a----       03.07.2020     12:53          63679 javax.ejb-javax.ejb-api-3.2.2.jar
-a----       03.07.2020     12:53          28016 javax.transaction-javax.transaction-api-1.3.jar
-a----       03.07.2020     12:53         126898 javax.ws.rs-javax.ws.rs-api-2.1.1.jar
-a----       03.07.2020     12:53         292301 org.apache.logging.log4j-log4j-api-2.13.3.jar
-a----       03.07.2020     12:53        1714164 org.apache.logging.log4j-log4j-core-2.13.3.jar
-a----       03.07.2020     12:53          23590 org.apache.logging.log4j-log4j-slf4j-impl-2.13.3.jar
-a----       03.07.2020     12:53           1526 org.example-helloworld-config-1.0-SNAPSHOT.jar
-a----       03.07.2020     12:53           6071 org.example-helloworld-model-1.0-SNAPSHOT.jar
-a----       03.07.2020     12:53          41203 org.slf4j-slf4j-api-1.7.25.jar
-a----03.07.2020 12:53 470 jboss部署结构.xml

jboss部署结构.xml的内容

<jboss-deployment-structure
        xmlns="urn:jboss:deployment-structure:1.2"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">


    <deployment>

        <dependencies>
            <module name="config"/>
        </dependencies>

    <exclude-subsystems>
        <subsystem name="logging" />
    </exclude-subsystems>

    </deployment>

</jboss-deployment-structure>
[..]
 <profile>
        <subsystem xmlns="urn:jboss:domain:logging:8.0">
            <add-logging-api-dependencies value="false"/>
            <console-handler name="CONSOLE">
                <formatter>
[..]
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="3" status="INFO">
  <Appenders>
    <Console name="Console1" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{1.}} - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="all">
      <AppenderRef ref="Console1"/>
    </Root>
  </Loggers>
</Configuration>
My
log4j2.xml

<jboss-deployment-structure
        xmlns="urn:jboss:deployment-structure:1.2"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">


    <deployment>

        <dependencies>
            <module name="config"/>
        </dependencies>

    <exclude-subsystems>
        <subsystem name="logging" />
    </exclude-subsystems>

    </deployment>

</jboss-deployment-structure>
[..]
 <profile>
        <subsystem xmlns="urn:jboss:domain:logging:8.0">
            <add-logging-api-dependencies value="false"/>
            <console-handler name="CONSOLE">
                <formatter>
[..]
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="3" status="INFO">
  <Appenders>
    <Console name="Console1" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{1.}} - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="all">
      <AppenderRef ref="Console1"/>
    </Root>
  </Loggers>
</Configuration>

注意:我还尝试使用logback作为日志记录实现。这还将产生到标准输出的重复格式化输出#


非常感谢任何解决/解决此问题的提示

如果您想在使用slf4j的部署中使用log4j core,即log4j2日志管理器实现,那么您需要在部署中包含正确的依赖项,这似乎是您正在做的

然后需要告诉WildFly不要将日志依赖项添加到部署中。以下选项将排除添加到部署中的日志依赖项

  • 使用
    jboss部署结构.xml
    排除日志子系统
  • 使用
    jboss部署结构.xml
    排除每个日志模块。不过,选项1比这容易得多
  • 重复输出的原因是记录器中的WildFly wrapps
    System.out
    System.err
    ,记录器名称分别为
    stdout
    stderr
    。要解决这个问题,您需要添加一个新的格式化程序、控制台处理程序和记录器,以删除默认的控制台处理程序格式

    /subsystem=logging/pattern-formatter=stdout:add(pattern="%s%n")
    /subsystem=logging/console-handler=stdout:add(named-formatter=stdout, autoflush=true, target=System.out)
    /subsystem=logging/logger=stdout:add(use-parent-handlers=false, handlers=[stdout])
    

    您的log4j2配置是什么样子的?看起来您正在使用一个控制台appender,它将产生您看到的输出。顺便说一句,没有可以删除的
    logmanager
    子系统。非常感谢您的回复!是的,我注册了控制台附加器。如果我想写信给STDOUT,这不对吗?非常感谢您的帮助!选项2:我理解,但辅助控制台处理程序将如何对此有所帮助,我是否可以以某种方式将处理程序从log4j2.xml“连接”到日志子系统处理程序?选项1:我是否仍然必须“排除”日志子系统?我尝试了使用slf4j和logback的一个最小工作示例。输出没有什么不同:
    10:06:37449 INFO[stdout](默认任务2)10:06:37.446[default task-2]TRACE o.e.websocket.WebsocketEndpoint-openand new session
    问题是WildFly将
    System.out
    System.err
    包装在
    控制台pender
    写入的记录器中。使用
    %s%n
    模式添加辅助控制台处理程序只是通过不添加其他格式来解决这个问题。有趣。看起来像只虫子。解决方法是使用
    /subsystem=logging/console handler=stdout:add(formatter=“%s%n”,autoflush=true,target=System.out)
    ,只需跳过
    模式格式化程序部分即可。或者将格式化程序命名为
    STDOUT
    基本上与处理程序不同的名称/大小写。