6

我正在使用 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>

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

4

2 回答 2

4

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 链接:

于 2021-11-01T17:10:36.513 回答
0

你在 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>
于 2022-02-21T16:16:21.720 回答