2

在 JVM 项目中,我们使用 logstash 在生产服务器上记录带有额外 JSON 数据的消息。

问题是 JSON 很难在控制台中读取。因此,我尝试更改为本地(开发)配置以使用 PatternLayoutEncoder 并在本地拥有漂亮、干净的日志。

我发现了这个问题: https ://github.com/logstash/logstash-logback-encoder/issues/136

结论是,使用 logstash logback 编码器 5.0,我们现在可以将键/值对与结构化参数统一起来。

我这样做了,效果很好,但是我遇到的问题是现在在logstash上,消息和JSON中都重复了这些对。

  • 对于我正在使用的控制台ch.qos.logback.classic.encoder.PatternLayoutEncoder
  • 对于我正在使用的 JSONnet.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 中重复它们?

4

0 回答 0