java 日志磁盘空间满后,最稳妥的处理方式是立即停止应用写入并清理旧日志,随后在代码中配置 logback 或 log4j2 的滚动策略(rolling policy)以自动管理文件体积。具体做法是修改配置文件,设置最大文件大小(如 100mb)和保留天数,这样当日志达到阈值时会自动压缩归档或删除旧文件,防止磁盘再次写满。

如何配置 Logback 实现按天滚动
Logback 使用 TimeBasedRollingPolicy 可以按天切割日志文件。通过设置 fileNamePattern 属性,系统会在每天午夜将前一天的日志归档为带日期的文件名,并根据 maxHistory 参数自动删除超过指定天数的旧文件。这种策略适合日志量稳定且需要按时间检索的场景。

<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
如何配置 Log4j2 实现按大小滚动
Log4j2 推荐使用 SizeBasedTriggeringPolicy 配合 Policies 来按文件大小切割日志。当单个日志文件达到设定的大小(例如 50MB)时,触发器会启动滚动操作,生成新的日志文件。结合 Delete 插件可以进一步限制总存储量,确保即使在高并发写入下也不会无限增长。
立即学习“Java免费学习笔记(深入)”;

<Configuration status="WARN">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/app-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
程序运行时磁盘突然写满会发生什么
当磁盘空间耗尽时,操作系统会拒绝新的写入请求,导致 Java 进程中的日志 Appender 抛出 IOException 或 OutOfMemoryError(如果日志缓冲在内存中)。此时应用可能无法记录关键错误信息,甚至因无法处理异常而崩溃。因此,除了配置滚动策略,还应在监控层面设置磁盘使用率告警,以便在空间即将耗尽前进行人工干预。


















