以JSON格式发送日志消息

时间:2018-07-12 12:38:13

标签: java spring logging slf4j zipkin

我在一个项目中使用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>)

我尝试了广泛的搜索方式,但无济于事。甚至有可能吗?

1 个答案:

答案 0 :(得分:0)

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

您可以做的是创建自己的JsonLogger包装器,该包装器需要一个普通的Logger(可能会绕起来),您可以将其包含在类的顶部,例如:

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

然后您可以在JsonLogger中使用Jackson,GSON或您喜欢的对象对JSON映射器进行操作,以便您可以执行所需的操作。然后,它可以像普通记录器一样提供infodebugwarnerror方法。

您还可以创建自己的JsonLoggerFactory来对其进行封装,以使每个类中包含的行更加简洁。