首页 > 解决方案 > Logback Java 中带有模式的 JSON 布局

问题描述

我正在使用 logback 登录我的 Spring Boot 应用程序并使用以下模式:

"%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>

有什么替代方法可以达到同样的效果吗?

标签: javalogbacklogback-classic

解决方案


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

好吧,在谷歌搜索了很多并浪费了几个小时之后,我遇到了另外一种 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 链接:


推荐阅读