我正在使用 Dropwizard 1.3.2,它使用 SLF4J over Logback 进行日志记录。我正在为 ElasticSearch 的摄取编写日志,所以我想我会使用 JSON 日志记录并制作一些 Kibana 仪表板。但我真的希望每条日志消息不止一个 JSON 项目 - 如果我正在记录一个包含十个字段的状态更新,理想情况下我希望记录该对象并将 JSON 字段显示为 JSON 日志中的顶级条目。我确实让 MDC 工作,但这非常笨拙并且不会使对象变平。
事实证明这很困难!我怎样才能做到这一点?我让它在 JSON 中记录,但我不能很好地记录多个 JSON 字段!
我做过的事情:
我的 Dropwizard 配置有这个附加程序:
appenders:
- type: console
target: stdout
layout:
type: json
timestampFormat: "ISO_INSTANT"
prettyPrint: false
appendLineSeparator: true
additionalFields:
keyOne: "value one"
keyTwo: "value two"
flattenMdc: true
显示附加字段,但这些值似乎在配置文件中是固定的并且不会更改。有一个“customFieldNames”,但没有关于如何使用它的文档,无论我在那里放什么,我都会得到一个“没有字符串参数构造函数/工厂方法来反序列化字符串值”错误。(文档有一个示例值“@timestamp”但没有解释,即使这样也会产生错误。他们也有像“(requestTime:request_time,userAgent:user_agent)”这样的例子,但同样,没有记录,我什么也做不了类似的工作,我尝试过的一切都会产生上述错误。
我确实让 MDC 工作,但是将每个项目插入 MDC 然后清除它似乎很愚蠢。
而且我可以反序列化一个对象并将其记录为嵌套的 JSON,但这似乎也很奇怪。
我在这方面看到的所有答案都是旧的 - 有人对如何在 Dropwizard 中很好地做到这一点有任何建议吗?