Logback Java 中带有模式的 JSON 布局

Har*_*pta 14 java logback logback-classic

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

"%d [%thread] %-5p [%c] [%F:%L] [trace=%X{X-B3-TraceId:-},span=%X{X-B3-SpanId:-}]  - %msg%n"
Run Code Online (Sandbox Code Playgroud)

现在我想将日志移至 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>
Run Code Online (Sandbox Code Playgroud)

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

小智 7

JsonLayout在实现我logback-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>
Run Code Online (Sandbox Code Playgroud)

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