0

我已经以域模式格式配置了我的 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>

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

提前致谢...

4

2 回答 2

0

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.

于 2021-06-11T14:43:52.750 回答
0

我不确定这是一个选项,但 WildFly 22 支持 log4j2,因此您可以使用 WildFly 配置日志记录,而无需包含 log4j2.xml。

看起来你想重定向stdout到一个文件。如果您希望您的 log4j2 配置控制格式,您需要更改MY-FORMATTER. 下面是一些用于配置服务器的 CLI 命令。

# Add the pattern for the stdout logger
/subsystem=logging/pattern-formatter=MY-PATTERN:add(pattern="%s%n")
# Create a file to direct stdout to
/subsystem=logging/periodic-size-rotating-file-handler=CUSTOM-FILE:add(named-formatter=MY-PATTERN, max-backup-index=24, rotate-size="10m", suffix=".yyyy-MM-dd-HH", append=true, file={relative-to=jboss.server.log.dir, path=server-stdout.log})
# Create the stdout logger, direct it to the file only
/subsystem=logging/logger=stdout:add(handlers=[CUSTOM-FILE], use-parent-handlers=false)

请注意,我将日志文件重命名server-stdout.log为不覆盖默认的server.log. 这样做的原因是服务器本身将记录到该文件,如果您使用该模式覆盖它,那么来自服务器本身的日志将不会被格式化。

另请注意,写入的任何内容也System.out将最终出现server-stout.log

于 2021-03-22T15:14:57.533 回答