在JVM项目中,我们使用logstash在生产服务器上记录带有其他JSON数据的消息。
问题是JSON很难在控制台中读取。因此,我尝试更改为本地(dev)配置以使用PatternLayoutEncoder并在本地拥有漂亮,干净的日志。
我发现了这个问题: https://github.com/logstash/logstash-logback-encoder/issues/136
结论是,使用logstash logback encoder 5.0,我们现在可以用结构化参数统一键/值对。
我做到了,而且效果很好,但我们遇到的问题是,现在在logstash中,消息和JSON中的对都会重复出现。
ch.qos.logback.classic.encoder.PatternLayoutEncoder
net.logstash.logback.encoder.LogstashEncoder
要么我这样做:
LOGGER.info("Some message", kv("user_id", 1));
logstash json是这样的:
{ message: "Some message", user_id: 1 }
但是控制台日志没有参数:
2018-04-10 08:38:38,042 INFO - Some message
或者我这样做:
LOGGER.info("Some message {}", kv("user_id", 1));
logstash json有重复的信息(不好):
{ message: "Some message user_id=1", user_id: 1 }
控制台日志就是我想要的:
2018-04-10 08:38:38,042 INFO - Some message user_id=1
所以我的问题是:
如何配置我的日志,以便以干净的方式在控制台中获取其他信息,但不要在JSON中重复这些信息?