Logback Java中带模式的JSON布局



我正在使用logback来登录我的春季启动应用程序,并使用以下模式:

"%d [%thread] %-5p [%c] [%F:%L] [trace=%X{X-B3-TraceId:-},span=%X{X-B3-SpanId:-}]  - %msg%n"

现在我想转到日志的JSON布局。但我看不到将该模式应用于日志的方法,因此上面的许多信息都丢失了。

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
<timestampFormat>yyyy-MM-dd'T'HH:mm:ss.SSSX</timestampFormat>
<timestampFormatTimezoneId>Etc/UTC</timestampFormatTimezoneId>
<jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
<prettyPrint>true</prettyPrint>
</jsonFormatter>
</layout>
</appender>

有其他方法可以实现同样的效果吗?

logback-spring.xml中实现JsonLayout后,我遇到了同样的问题,我意识到我无法放入自己的自定义模式。

在谷歌上搜索了很多并浪费了几个小时之后,我又发现了一种logAppender,它允许模式并以Json格式打印日志。

您需要使用net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder编码器而不是JsonLayout

示例实现可以如下:

<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<fieldName>timestamp</fieldName>
<pattern>yyyy-MM-dd' 'HH:mm:ss.SSS</pattern>
</timestamp>
<pattern> your desired pattern </pattern>
</providers>
</encoder>

编辑:有关详细文档,您也可以查看以下github链接:

从logback 1.3.8/1.4.8开始,内置了对JSON的支持https://logback.qos.ch/manual/encoders.html#JsonEncoder所以你可以更改配置

所以配置文件logback-spring.xml看起来像

<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.JsonEncoder"/>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="CONSOLE"/>
</root>
</configuration>

然后,您将获得控制台的JSON输出

您在lagback.xml 中丢失了和之间

<configuration debug="true">
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
***<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">***
<layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
<timestampFormat>yyyy-MM-dd'T'HH:mm:ss.SSSZZ</timestampFormat>
<timestampFormatTimezoneId>Etc/UTC</timestampFormatTimezoneId>
<jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
<prettyPrint>true</prettyPrint>
</jsonFormatter>
</layout>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="stdout"/>
</root>

相关内容

  • 没有找到相关文章

最新更新