我在一个项目中使用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>)
我尝试了广泛的搜索方式,但无济于事。甚至有可能吗?
答案 0 :(得分:0)
slf4j API仅将String
作为info
,debug
,warn
,error
消息的输入。
您可以做的是创建自己的JsonLogger包装器,该包装器需要一个普通的Logger
(可能会绕起来),您可以将其包含在类的顶部,例如:
private static final JsonLogger logger = new JsonLogger(LoggerFactory.getLogger(MyClass.class))
;
然后您可以在JsonLogger中使用Jackson,GSON或您喜欢的对象对JSON映射器进行操作,以便您可以执行所需的操作。然后,它可以像普通记录器一样提供info
,debug
,warn
,error
方法。
您还可以创建自己的JsonLoggerFactory
来对其进行封装,以使每个类中包含的行更加简洁。