【问题标题】:Send log messages as JSON以 JSON 格式发送日志消息
【发布时间】:2018-07-12 12:38:12
【问题描述】:

我在一个项目中使用 Spring Boot,目前正在探索日志记录行为。为此,我正在使用 zipkin 服务。

我已使用正确的 logback.xml 将日志导出到 json 文件:

{"@timestamp":"2018-07-12T17:53:44.613+05:30","@version":"1","message":"in meth3","logger_name":"com.example.demo.Controller.Controller","thread_name":"http-nio-8089-exec-3","level":"INFO","level_value":20000,"traceId":"62bcfafad3a37a09","spanId":"62bcfafad3a37a09","spanExportable":"true","X-Span-Export":"true","X-B3-SpanId":"62bcfafad3a37a09","X-B3-TraceId":"62bcfafad3a37a09","caller_class_name":"com.example.demo.Controller.Controller","caller_method_name":"meth3","caller_file_name":"Controller.java","caller_line_number":43,"appname":"pom.artifactId_IS_UNDEFINED","version":"pom.version_IS_UNDEFINED"}

有没有办法让我可以在日志的消息部分插入一个 jsonObject。类似的东西:

logger.info(<some_json_object>)

我尝试过广泛搜索方法,但无济于事。有可能吗?

【问题讨论】:

  • Zipkin 是一个跟踪收集器。它与日志无关,除了客户端工具库可以选择在日志消息中打印跟踪信息。

标签: java spring logging slf4j zipkin


【解决方案1】:

slf4j API 仅将String 作为infodebugwarnerror 消息的输入。

您可以做的是创建自己的 JsonLogger 包装器,它采用普通的 Logger(可能会环绕它),您可以将其包含在类的顶部,例如:

private static final JsonLogger logger = new JsonLogger(LoggerFactory.getLogger(MyClass.class));

然后,您可以在 JsonLogger 中使用 Jackson、GSON 或您最喜欢的对象到 JSON 映射器,这样您就可以做您想做的事。然后它可以像普通记录器一样提供infodebugwarnerror 方法。

您也可以创建自己的JsonLoggerFactory,它会为您封装它,以便包含在每个类中的行更简洁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 2019-03-31
    • 1970-01-01
    相关资源
    最近更新 更多