SLF4J如何支持结构化日志记录

问题描述 投票:3回答:4

谁知道structured logging通常用SLF4J实现?

是否有任何开源处理这个?

java logging logback slf4j jul-to-slf4j
4个回答
3
投票

如果将SLF4J与Logback结合使用,StructuredArguments支持结构化日志记录。您可以在logback page on Github上找到有关此内容的文档。

它是如何工作的一个简单例子。这个日志线..

log.debug("Retrieved file {}", StructuredArguments.value("filename", upload.getOriginalFilename()))

..yields以下日志json输出:

{
  "filename": "simple.zip",
  "@timestamp": "2019-02-12T14:31:31.631+00:00",
  "severity": "DEBUG",
  "service": "upload",
  "thread": "http-nio-9091-exec-1",
  "logger": "some.great.ClassName",
  "message": "Retrieved file simple.zip"
}

2
投票

对于任何偶然发现这个相当古老的问题的人:作为一种替代方法,开发人员比将每个参数手动设置为MDC更友好,您可以使用像https://github.com/jacek99/structlog4j这样的结构化记录器,理想情况下还可以使用yaml或json格式化程序。然后很容易将日志提供给ELK堆栈,并根据参数查询所有日志(您不必手动创建日志条目解析器,因为所有相关字段都将以结构化形式存在)。或者在slf4j之上创建自己的简单记录器,这将使任何varargs通过.log方法并在MDC中自动创建键值对,然后您可以将其与结构化格式化程序配对,例如如果您的运行时使用Logstash:https://github.com/logstash/logstash-logback-encoder#mdc-fields


1
投票

在github中有an example,使用SLF4J实现。希望它会对你有所帮助。

要获得更多学习,您可以阅读本教程。

  1. Structured logging in logback using MDC
  2. Master Java Logging

0
投票

您可以尝试在Scala https://izumi.7mind.io/latest/release/doc/logstage/index.html中使用Logstage

我们为slf4j提供了一个有效的适配器,我们为您的日志执行零成本结构化。

此外,您可能会发现尽管更换了MDC,我们仍有许多优点。对于效果库,我们有Fiber和FiberLocal的上下文我们有自动结构标识符,以便在结构化数据库中更好地处理

© www.soinside.com 2019 - 2024. All rights reserved.