首页 > 解决方案 > Wildfly 18 在 log4j 记录器之前添加了服务器记录模式

问题描述

我已经以域模式格式配置了我的 WildFly 18 服务器,我们使用 log4j 记录器。当我签入 server.log 文件时,来自 log4j 的所有日志都按照 Wildfly 自己的记录器格式进行记录。像下面的第 1 行日期和日志级别来自服务器日志,下一个日期格式和日志级别和日志消息来自 log4j。

2021-03-19 00:13:06,623 INFO  2021-03-19 00:13:06,601 INFO  [com.app.connection.service] CurrentThreadID=436 On

我搜索了很多...我发现了很多与独立模式相关的配置,有些人说这些配置可以在 domain.xml 中完成,但没有任何效果

我在 domain.xml 中有以下配置

          <subsystem xmlns="urn:jboss:domain:logging:8.0">
                <custom-handler name="CUSTOM-FILE" class="org.jboss.logmanager.handlers.PeriodicSizeRotatingFileHandler" module="org.jboss.logmanager">
                    <formatter>
                        <named-formatter name="MY-PATTERN"/>
                    </formatter>
                    <properties>
                        <property name="maxBackupIndex" value="24"/>
                        <property name="rotateSize" value="10000000"/>
                        <property name="suffix" value=".yyyy-MM-dd-HH"/>
                        <property name="append" value="true"/>
                        <property name="fileName" value="${jboss.server.log.dir}/server.log"/>
                    </properties>
                </custom-handler>
                <logger category="com.arjuna">
                    <level name="WARN"/>
                </logger>
                <logger category="io.jaegertracing.Configuration">
                    <level name="WARN"/>
                </logger>
                <logger category="org.jboss.as.config">
                    <level name="DEBUG"/>
                </logger>
                <logger category="sun.rmi">
                    <level name="WARN"/>
                </logger>
                <root-logger>
                    <level name="INFO"/>
                    <handlers>
                        <handler name="CUSTOM-FILE"/>
                    </handlers>
                </root-logger>
                <formatter name="PATTERN">
                    <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %s%e%n"/>
                </formatter>
                <formatter name="MY-PATTERN">
                    <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %s%e%n"/>
                </formatter>
                <formatter name="COLOR-PATTERN">
                    <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p %s%e%n"/>
                </formatter>
            </subsystem>

在 log4j.xml 中,我有一个如下所示的控制台附加程序,并且这个 log4j.xml 存在于路径 wildfly18.0.1\modules\org\apache\logging\log4j\main\log4j2-props 的模块目录中

<Console name="Console">
    <PatternLayout pattern="%d %-5p [%c] %m\n" />
</Console>

以下是我尝试过的事情:

  1. 在日志子系统中添加了标签

    <add-logging-api-dependencies value="false"/>
    <use-deployment-logging-config value="false"/>
    
  2. 添加了记录器

 <logger category="stdout" use-parent-handlers="false">
        <level name="INFO"/>
        <handlers>
             <handler name="CUSTOM-FILE"/>
         </handlers>
  </logger>
  1. 从部署中排除的子系统和模块。在 META-INF\jboss-deployment-structure.xml 中添加了以下内容

我们使用 EAR 部署文件

<deployment>
        <exclude-subsystems>
           <subsystem name="logging"/>
        </exclude-subsystems>
        <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>

那么,有人可以帮我正确配置域模式设置吗?

提前致谢...

标签: javaloggingwildflylog4j2wildfly-18

解决方案


As written in many other comments, Jboss adds it's own pattern and treats pattern of application log4j2.xml as the "message" to its own pattern. To resolve this add following to the logging subsystem of your Jboss Standalone.xml

   <subsystem xmlns="urn:jboss:domain:logging:8.0">
    ....
    <console-handler name="stdout-console" autoflush="true">
        <level name="ALL"/>
        <formatter>
            <pattern-formatter pattern="%s%n"/>
        </formatter>
    </console-handler>
    <logger category="stdout" use-parent-handlers="false">
        <handlers>
            <handler name="stdout-console"/>
        </handlers>
    </logger>
    ....
   </subsystem>

This will cause the default log pattern of Jboss to be overwritten and you log will have what you have configured in log4j2.xml console appender.


推荐阅读