这个问题之前已经被问过几次,并且有一些答案,但它们都不适合我的要求,因为答案是针对控制台附加程序或文件附加程序的。
这两个附加程序的格式化程序配置都是通过独立或域驱动的配置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 格式化程序,也不允许覆盖战争。
所以,如果有事情要做,就必须在服务器端完成。
任何帮助表示赞赏。