0

我的 logback.xml 中有以下用于登录 JSON。我想以纪元时间格式(以秒为单位)而不是日期和时间打印下面的 log_timestamp 字段。

<appender name="JSON_CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
        <providers>
            <pattern>               
                   <pattern>                       
                        {
                          "appNname": "${appName}",
                          "log_timestamp":"%date",
                          "level": "%level",
                          "method":"%M",
                          "class":"%c",
                          "user_id": "%mdc{user_id}"
                        }    
                   </pattern>
            </pattern>
        </providers>
    </encoder>
</appender>

问题与打印纪元时间戳而不是日期和时间有关

我通过在编码器下直接包含以下内容来尝试上述链接中的建议。但它没有用。

<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
   <layout class="net.logstash.logback.layout.LogstashLayout">    
     <timestampPattern>[UNIX_TIMESTAMP_AS_NUMBER]</timestampPattern>
   </layout>

如果有人给我提示以实现这一目标,我将不胜感激。

4

1 回答 1

1

由于 logback 的%date转换字不支持纪元时间,因此您需要使用 logstash-logback-encoder 的timestamp提供程序来添加时间戳字段。

<appender name="JSON_CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
        <providers>
            <timestamp>
                <fieldName>log_timestamp</fieldName>
                <pattern>[UNIX_TIMESTAMP_AS_NUMBER]</pattern>
            </timestamp>
            <pattern>               
                   <pattern>                       
                        {
                          "appName": "${appName}",
                          "level": "%level",
                          "method":"%M",
                          "class":"%c",
                          "user_id": "%mdc{user_id}"
                        }    
                   </pattern>
            </pattern>
        </providers>
    </encoder>
</appender>

请注意,时间戳值将以毫秒为单位,而不是秒。

如果你想要几秒钟,那么我认为唯一的方法是实现一个自定义JsonProvider

于 2021-06-09T21:21:02.057 回答