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

SpringBoot中JsonLayout自定义日志字段:如何设置additionalInfo

解决自定义JsonLayout中additionalInfo字段为null的问题

情况1:设置静态固定值

你的CustomLoggingConfig类已经通过@Setter提供了additionalInfo的设置方法,但logback容器创建这个布局实例时,并未给该属性赋值。需要在logback配置文件(如logback-spring.xml或logback.xml)中配置自定义布局时,显式指定属性值:

<configuration>
    <appender name="JSON_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <!-- 配置自定义布局类 -->
            <layout class="com.yourpackage.CustomLoggingConfig">
                <!-- 直接设置additionalInfo的静态固定值 -->
                <additionalInfo>系统版本:v1.0,环境:测试环境</additionalInfo>
            </layout>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="JSON_APPENDER"/>
    </root>
</configuration>

logback初始化时会通过@Setter注入该值,日志输出时就能正常显示additionalInfo内容。

情况2:设置动态上下文值

如果需要每个日志事件携带不同的额外信息,不能使用类成员变量(布局实例为单例,成员变量会被全局覆盖),可以利用**MDC(Mapped Diagnostic Context)**传递动态值:

  1. 修改CustomLoggingConfig的方法,从MDC中取值:
@Setter
public class CustomLoggingConfig extends JsonLayout {
    public static final String ADDITIONAL_INFO = "additionalInfo";
    
    @Override
    public void addCustomDataToJsonMap(Map<String, Object> var1, ILoggingEvent var2) {
        // 从日志事件的MDC中获取动态值,无值时设默认值
        String dynamicInfo = var2.getMDCPropertyMap().get(ADDITIONAL_INFO);
        var1.put(ADDITIONAL_INFO, dynamicInfo != null ? dynamicInfo : "无额外信息");
    }
}
  1. 在业务代码中,日志打印前设置MDC值:
// 业务逻辑中添加动态上下文信息
MDC.put(CustomLoggingConfig.ADDITIONAL_INFO, "用户ID:1001,操作:数据库连接");
// 打印日志
log.error("Exception occurred with message: Error in connecting to database");
// 请求结束后清除MDC,避免内存泄漏
MDC.remove(CustomLoggingConfig.ADDITIONAL_INFO);

如果是Web项目,可通过拦截器统一在请求开始时设置MDC,请求结束时清除。

问题根源

你的additionalInfo是类私有成员变量,默认值为null,而logback初始化布局时未对其赋值,因此日志输出时该字段为null。通过配置文件注入静态值,或通过MDC传递动态值,才能让字段显示有效内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:18:20