2

这个问题之前已经被问过几次,并且有一些答案,但它们都不适合我的要求,因为答案是针对控制台附加程序或文件附加程序的。

这两个附加程序的格式化程序配置都是通过独立或域驱动的配置xml.但是,我使用的是json /logstash formatter.

我的问题是发送到stdout或被日志级别stderr包装Redhat jboss eap为 INFO 的消息(无论它们的级别如何),并且堆栈跟踪的每一行都被视为一个单独的 JSON 块。

因此,logstash 将所有消息解释为 INFO 而不是警告或错误,并且在 kibana 中看起来非常丑陋且难以解释。

jboss 服务器日志的片段。

{
    "timestamp": "2020-02-19T13:19:18.743Z",
    "sequence": 249,
    "loggerClassName": "org.jboss.logmanager.Logger",
    "loggerName": "**stdout**",
    "level": "**INFO**",
    "message": "2020-02-19T14:19:18.000743+0100 [DBQueue_3] **ERROR** **com.uuapp.data** - Invalid operation name in participant message \"Pmsg:Id=0,Sender=0,Consumer=0,ActIndex=0,Oper=null,Flag=0, Priority=8\"",
    "threadName": "DBQueue_3",
    "threadId": 530,
    "mdc": {
    },
    "ndc": "",
    "hostName": "uu-app-18934",
    "processName": "jboss-modules.jar",
    "processId": 22061
}

有没有办法绕过这个烦人的功能,让 jboss 使用从 logback 的控制台附加程序发送的日志?至少将堆栈跟踪组合成一个 json 块?

请注意,该应用程序使用 logback。我知道 logback 有我可以使用的 json 格式化程序,但是我的双手被束缚了,因为该应用程序是一种用 java 开发的 cots 产品,并且使用 3pp jars,这些 jars 既没有更新为使用 json 格式化程序,也不允许覆盖战争。

所以,如果有事情要做,就必须在服务器端完成。

任何帮助表示赞赏。

4

1 回答 1

0

尝试在日志子干下的 Jboss 服务器的standalone.xml 中添加以下代码。这是因为 log4j2.xml 消息是由 Jboss 自己的模式包装的。

 <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>
....
</substem>
于 2021-06-11T14:52:08.393 回答