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

使用Logback库生成JSON格式日志时日志文件无法生成的问题

问题诊断与修复方案

你遇到的核心问题是Logback配置结构错误——你把RollingFileAppender的核心配置项(比如<file>、<rollingPolicy>、<triggeringPolicy>)错误地嵌套在了<layout>标签内部,这违反了Logback的Appender配置规范,导致Appender无法正确初始化,自然生成不了日志文件。

错误配置的关键问题

在你的JSON日志配置中,RollingFileAppender的直接子元素应该是<file>、<rollingPolicy>、<triggeringPolicy>以及负责输出格式的<encoder>(或<layout>),但你把前三个配置都放到了<layout>里面,这会让Logback无法识别这些配置项,导致Appender启动失败。

另外,使用JsonLayout时,推荐配合LayoutWrappingEncoder来包装,这是更规范的配置方式,能避免潜在的格式兼容问题。

修正后的正确配置

下面是调整好的logback-spring.xml配置,我帮你修正了结构问题,同时保留了JSON格式化的需求:

<appender name="RollingFile-Appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- 这些核心配置必须是RollingFileAppender的直接子元素 -->
    <file>${LOG_PATH}/test.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <maxIndex>10</maxIndex>
        <FileNamePattern>${LOG_ARCHIVE}/test.log.%i</FileNamePattern>
    </rollingPolicy>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <MaxFileSize>250MB</MaxFileSize>
    </triggeringPolicy>
    
    <!-- 使用LayoutWrappingEncoder包装JsonLayout,规范输出JSON格式日志 -->
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
            <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
                <prettyPrint>true</prettyPrint>
            </jsonFormatter>
            <!-- 自定义日志包含的字段,按需调整 -->
            <timestampFormat>yyyy-MM-dd 'at' HH:mm:ss.SSS z</timestampFormat>
            <includeLevel>true</includeLevel>
            <includeLoggerName>true</includeLoggerName>
            <includeThreadName>true</includeThreadName>
            <includeCallerData>true</includeCallerData>
        </layout>
    </encoder>
</appender>

额外注意事项

  • 依赖版本兼容性:你使用的logback-contrib 0.1.5版本较老,和Jackson 2.13.3可能存在兼容性风险。如果后续遇到Jackson相关报错,可以考虑升级logback-contrib到最新稳定版(比如0.1.6),或者调整Jackson版本到适配范围。
  • 字段自定义:JsonLayout默认会包含基础日志字段,你可以通过<includeXXX>标签控制是否包含特定字段(比如MDC数据、调用栈信息等),根据业务需求调整即可。
  • 验证配置:修改完成后启动应用,检查${LOG_PATH}目录下的test.log,应该能看到格式化后的JSON日志条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:57:30