我想将日志事件作为带有参数化字符串消息的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的自动过滤器几乎无效。
message
someParameter
相反,我希望有一个布局可以创建如下所示的JSON:
{ "message": "This is a log message with a parameter {}", "level": INFO, "parameters": [ "1234" ] }
这种格式将使Loggly可以将所有日志事件与该消息分组This is a log message with a parameter在一起,而与的值无关someParameter。
This is a log message with a parameter
看起来Logstash的KV筛选器做了类似的事情- 是否有任何方法可以通过Logback完成此任务,而无需编写我自己的布局来执行ILogEvent对象的自定义序列化?
您可以使用“ 映射的诊断上下文” 为每种类型的日志消息设置一个标记,然后在进行loggly筛选时就可以对其进行过滤。
根据JsonLayout的来源,该戳记作为单独的值存储在JSON中。