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

Logback配置日志文件超1MB限制且未归档问题咨询

问题描述

我配置了如下Logback配置:

<configuration>
    <property name="HOME_LOG" value="/home/mah454/logs/app.log"/>
    <appender name="FILE-ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${HOME_LOG}</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>/home/mah454/logs/app.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>1MB</maxFileSize>
            <totalSizeCap>5MB</totalSizeCap>
            <maxHistory>3</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%d %p [%t] %m%n</pattern>
        </encoder>
    </appender>

    <logger name="com.sample" level="debug" additivity="false">
        <appender-ref ref="FILE-ROLLING"/>
    </logger>

    <root level="error">
        <appender-ref ref="FILE-ROLLING"/>
    </root>
</configuration>

并编写了如下无限循环代码测试Logback的限制:

package com.sample;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MainClass {
    private static final Logger logger = LoggerFactory.getLogger(MainClass.class);

    public static void main(String[] args) {
        while (true) {
            logger.info("This is INFO");
        }
    }
}

为何logback.xml中配置的1MB文件大小限制被突破,且日志从未被归档?


问题原因及解决方案

以下是几个可能导致该问题的核心原因及对应解决办法:

1. Logback版本兼容性缺陷

SizeAndTimeBasedRollingPolicy在Logback 1.1.0之前的版本存在大小触发逻辑的bug,无法正确触发滚动归档。请确认使用的是Logback 1.1.0及以上版本,该版本修复了该策略的大小检测问题。

2. 文件系统缓存导致大小检测延迟

操作系统的文件缓存可能让Logback无法实时获取日志文件的真实大小,导致超过阈值后仍未触发滚动。可以通过强制即时刷新写入来解决:

<appender name="FILE-ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${HOME_LOG}</file>
    <immediateFlush>true</immediateFlush> <!-- 强制写入后立即刷盘 -->
    <!-- 其余配置保持不变 -->
</appender>

3. 滚动触发逻辑补充配置

虽然SizeAndTimeBasedRollingPolicy自带大小检测,但在极端快的日志写入场景下,可额外配置触发策略明确大小触发条件,提升检测灵敏度:

<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <fileNamePattern>/home/mah454/logs/app.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
    <maxFileSize>1MB</maxFileSize>
    <totalSizeCap>5MB</totalSizeCap>
    <maxHistory>3</maxHistory>
</rollingPolicy>
<!-- 补充大小触发策略 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
    <maxFileSize>1MB</maxFileSize>
</triggeringPolicy>

4. 目录权限不足

日志文件能正常写入,但归档时需要创建压缩文件,若/home/mah454/logs目录没有足够的读写权限,会导致归档失败。可通过以下命令检查权限:

ls -ld /home/mah454/logs

确保运行程序的用户对该目录拥有完整的读写权限。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:05:55