JBoss/WildFly内部重复格式化的记录器输出为 [英] Duplicately formatted logger output inside inside JBoss/ Wildfly AS

查看:0
本文介绍了JBoss/WildFly内部重复格式化的记录器输出为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

看来,我不能排除JBoss/WildFly日志记录子系统。

我有一个Java EE EAR,希望将slf4j API与log4J2实现一起使用。

我的目的是禁用JBoss日志记录子系统,以便让我的slf4j log4j2实现处理日志记录。但我仍然得到标准输出的重复处理:

12:55:00,820 INFO [stdout] (Thread-316) 12:55:00 INFO

耳朵结构如下:

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 470 jboss-deployment-structure.xml

jboss-deployment-structure.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>

此外,我修改了standalone.xml

[..]
 <profile>
        <subsystem xmlns="urn:jboss:domain:logging:8.0">
            <add-logging-api-dependencies value="false"/>
            <console-handler name="CONSOLE">
                <formatter>
[..]

我的log4j2.xml

<?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的部署中使用log4j2日志管理器实现log4j-core,则需要将正确的依赖项包括在您正在执行的部署中。

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

  1. 使用jboss-deployment-structure.xml排除日志记录子系统
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclude-subsystems>
            <subsystem name="logging"/>
        </exclude-subsystems>
    </deployment>
</jboss-deployment-structure>
  1. add-logging-api-dependencies属性更改为false。注意:这会影响所有部署。
/subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=false)
  1. 使用jboss-deployment-structure.xml排除每个日志记录模块。不过,选项1要比这简单得多。
重复输出的原因是WildFly将System.outSystem.err包装在一个记录器中,记录器名称分别为stdoutstderr。若要解决此问题,您需要添加新的格式化程序、控制台处理程序和记录器以删除默认的控制台处理程序格式。

/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])

这篇关于JBoss/WildFly内部重复格式化的记录器输出为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆