一尘不染

是否有使用消息参数作为属性创建JSON对象的Logback布局?

java

我想将日志事件作为带有参数化字符串消息的JSON对象发送到Loggly。我们的项目目前有很多代码如下:

String someParameter = "1234";
logger.log("This is a log message with a parameter {}", someParameter);

我们目前正在使用Logback作为SLF4J后端,并使用Logback的JsonLayout将ILogEvent对象序列化为JSON。因此,当他们将我们的日志事件发送到Loggly时,它们看起来像这样:

{
    "message": "This is a log message with a parameter 1234",
    "level": INFO,
    ....
}

尽管这样做确实有效,但它会message为的每个值发送一个不同的字符串someParameter,这使Loggly的自动过滤器几乎无效。

相反,我希望有一个布局可以创建如下所示的JSON:

{
    "message": "This is a log message with a parameter {}",
    "level": INFO,
    "parameters": [
        "1234"
    ]
}

这种格式将使Loggly可以将所有日志事件与该消息分组This is a log message with a parameter在一起,而与的值无关someParameter

看起来Logstash的KV筛选器做了类似的事情-
是否有任何方法可以通过Logback完成此任务,而无需编写我自己的布局来执行ILogEvent对象的自定义序列化?


阅读 204

收藏
2020-12-03

共1个答案

一尘不染

您可以使用“ 映射的诊断上下文”
为每种类型的日志消息设置一个标记,然后在进行loggly筛选时就可以对其进行过滤。

根据JsonLayout的来源,该戳记作为单独的值存储在JSON中。

2020-12-03