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"></appender-ref></root></configuration>
如何配置 Log4j2 实现按大小滚动
Log4j2 推荐使用 SizeBasedTriggeringPolicy 配合 Policies 来按文件大小切割日志。当单个日志文件达到设定的大小(例如 50MB)时,触发器会启动滚动操作,生成新的日志文件。结合 Delete 插件可以进一步限制总存储量,确保即使在高并发写入下也不会无限增长。

<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"></patternlayout><policies><sizebasedtriggeringpolicy size="50 MB"></sizebasedtriggeringpolicy></policies><defaultrolloverstrategy max="10"></defaultrolloverstrategy></rollingfile></appenders><loggers><root level="info"><appenderref ref="RollingFile"></appenderref></root></loggers></configuration>
程序运行时磁盘突然写满会发生什么
当磁盘空间耗尽时,操作系统会拒绝新的写入请求,导致 Java 进程中的日志 Appender 抛出 IOException 或 OutOfMemoryError(如果日志缓冲在内存中)。此时应用可能无法记录关键错误信息,甚至因无法处理异常而崩溃。因此,除了配置滚动策略,还应在监控层面设置磁盘使用率告警,以便在空间即将耗尽前进行人工干预。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











