当前位置: 首页 > 知识库问答 >
问题:

Wildfly 18在log4j记录器之前添加服务器日志记录模式

席波娃
2023-03-14

我已经以域模式格式配置了我的WildFly 18服务器,我们使用log4j记录器。当我签入服务器时。日志文件,所有来自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中完成,但都不起作用

我在域中有以下配置。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,我有一个控制台appender如下所示,这log4j.xml出现在模块目录中路径Wildfly18.0.1\模块\org\apache\log\log4j\main\log4j2-props

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

以下是我尝试过的事情:

>

  • 在日志记录子系统中添加了标记

    <add-logging-api-dependencies value="false"/>
    <use-deployment-logging-config value="false"/>
    

    添加了记录器

     <logger category="stdout" use-parent-handlers="false">
            <level name="INFO"/>
            <handlers>
                 <handler name="CUSTOM-FILE"/>
             </handlers>
      </logger>
    

    我们使用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>
    

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

    提前感谢。。。

  • 共有2个答案

    艾焱
    2023-03-14

    正如许多其他评论中所述,Jboss添加了自己的模式,并处理应用程序log4j2的模式。xml作为其自身模式的“消息”。要解决此问题,请向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>
    

    这将导致Jboss的默认日志模式被覆盖,您的日志将包含您在控制台附加程序中配置log4j2.xml内容。

    柴琦
    2023-03-14

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

    似乎要将标准输出重定向到文件。如果希望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)
    

    注意,我将日志文件重命名为服务器stdout。记录日志,以免覆盖默认服务器。日志。原因是服务器本身将记录到此文件,如果使用该模式覆盖它,则不会格式化服务器本身的日志。

    还要注意,写入系统的任何内容。out将以服务器stout结束。还要记录。

     类似资料:
    • 我知道有很多关于这个的问题,但是我确实经历了所有的问题,并且有点困惑自己,我列出了我遵循的步骤,请让我知道我把它搞砸了。 1) 我只想在应用程序级别使用Log4j,所以需要复制WL_HOME/server/lib/wllog4j。jar和log4j。jar在Domail_Home/Lib? 2) 我使用的是Maven,我在pom中添加了Log4j依赖项。xml[war]。我把战争藏在耳朵里。 3)

    • 我想在我的应用程序中使用SLF4J+logback用于两个目的--日志和审计。 14:41:57.978[main]信息AUDIT_LOGGER-110欢迎使用main 如何确保审核消息在审核记录器下只出现一次?

    • 我刚刚为我们的微服务环境在前端创建了简单的Zuul代理,但现在我想将所有条目记录到通过代理的日志文件中。 做任何我需要做的事情。

    • 主要内容:Logger日志方法的例子,Logger的日志方法Logger 类有多种方法来处理日志记录活动。Logger 类不允许我们实例化一个新的 Logger 实例,但它支持两种获取 Logger 对象的静态方法: 两个方法中的第一个返回应用程序实例的根记录器,它没有名称。 任何其他命名的 Logger 对象实例都是通过传递记录器的名称由第二种方法获得的。记录器的名称可以是您传递的任何字符串,通常是类或包名称,如下所述: Logger日志方法的例子 Lo

    • 当前的日志阈值是关于日志级别(TRACE,DEBUG,INFO,WARN,ERROR和FATAL)对我来说是不够的。我有一个千兆字节的日志从第三方库写入紧急情况下的错误类别。我不想打开这个日志,因为我想看到这个问题日志。大多数日志都是连续重复的堆栈跟踪。所以我想要一种可以 1)跳过日志,如果阈值(kb/sec)是真实的(我的意思是当我们写很多日志-我们可能会跳过一些)或 2)如果在一段时间内打印了

    • 问题内容: 我对如何将日志条目直接放入(而不是logstash)感到有些困惑。到目前为止,我发现了一些附加目的地(,等等),允许将日志发送到远程主机,也可能这似乎让我们日志转换为“弹性友好”的格式,但这种方法看起来古怪......还是我错误?这是将日志发送到的一种方法吗? 到目前为止,我有这样的配置: 但是我得到一个错误: 我找不到任何有用的示例,所以我无法理解我该怎么做以及如何解决。谢谢。 问题