You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Logback JSON控制台Appender的message字段追加时间戳与日志名

问题描述

当前使用的Logback控制台Appender配置如下:

<appender name="CONSOLE_JSON" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="net.logstash.logback.encoder.LogstashEncoder">
        <customFields>{ "name": "${foobar.foo}", "id": "${foobar.foo.Id}" }</customFields>
    </encoder>
</appender>

该配置生成的日志格式为:

{"@timestamp":"2025-04-21T20:28:10.501365652Z","@version":"1","message":"This is process log.","logger_name":"com.foo.bar.common.Logger","thread_name":"dev","level":"INFO","level_value":20000,"name":"foobar","Id":"1"} 

需要将时间戳和日志名追加到message字段,使message格式变为:

"message":"2025-04-21T20:28:10.5013 [com.foo.bar.common.Logger] This is process log."

此前尝试使用LoggingEventCompositeJsonEncoder未成功,求可行实现方案。

解决方案

方案一:直接修改LogstashEncoder配置(推荐)

利用LogstashEncoder自带的messagePattern属性,无需更换编码器即可定制message字段格式,配置如下:

<appender name="CONSOLE_JSON" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="net.logstash.logback.encoder.LogstashEncoder">
        <!-- 自定义message字段的组合格式 -->
        <messagePattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSS} [%logger] %msg</messagePattern>
        <customFields>{ "name": "${foobar.foo}", "id": "${foobar.foo.Id}" }</customFields>
    </encoder>
</appender>

配置说明

  • %d{yyyy-MM-dd'T'HH:mm:ss.SSS}:生成指定格式的时间戳,匹配需求中的毫秒精度
  • [%logger]:将日志记录器的全限定名包裹在方括号中输出
  • %msg:输出原始的日志消息内容

此方案会自动保留@timestamp、logger_name等默认字段,同时修改message字段为目标格式,配置简洁易维护。

方案二:正确使用LoggingEventCompositeJsonEncoder

如果坚持使用LoggingEventCompositeJsonEncoder,需显式声明所有需要输出的字段,避免默认字段丢失,配置如下:

<appender name="CONSOLE_JSON" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
        <providers>
            <!-- 保留默认时间戳字段 -->
            <timestamp/>
            <!-- 自定义message字段的内容 -->
            <pattern>
                <pattern>
                    {
                        "message": "%d{yyyy-MM-dd'T'HH:mm:ss.SSS} [%logger] %msg"
                    }
                </pattern>
            </pattern>
            <!-- 输出其他必要的默认字段 -->
            <level/>
            <threadName/>
            <loggerName/>
            <!-- 添加自定义字段 -->
            <customFields>{ "name": "${foobar.foo}", "id": "${foobar.foo.Id}" }</customFields>
        </providers>
    </encoder>
</appender>

注意事项

  • LoggingEventCompositeJsonEncoder不会自动输出默认字段,需通过<providers>下的标签逐一声明
  • <pattern>标签用于构造自定义JSON字段,这里直接定义message的格式

内容的提问来源于stack exchange,提问作者Fetona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:01:21