Linux服务器在长时间运行后,常常会因为应用程序持续写日志而导致日志文件体积不断膨胀,最终占满磁盘空间,这种现象被称为日志溢出。日志溢出会让系统无法写入新数据,相关服务也可能崩溃。要解决这一问题,可以从日志轮转、手动清理和配置优化几个方面入手。

为什么会产生日志溢出
日志溢出通常不是突发事件,而是日积月累的结果。常见原因有:
- 程序使用追加方式写日志,且未设置单文件大小上限
- 缺乏自动清理机制,历史日志一直保留
- 错误级别日志在生产环境被打开,输出过于频繁
使用logrotate进行日志轮转
logrotate是Linux系统自带的日志管理工具,能按日、周、月或文件大小来切割日志,并支持压缩与删除。下面是一个常见的配置示例,用于管理Nginx日志。
# /etc/logrotate.d/nginx 示例配置
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload nginx > /dev/null 2>&1
endscript
}
上述配置表示每天轮转一次,保留14天,旧日志压缩存储。这样能有效控制单目录占用空间。
手动清理与临时处理
当磁盘已经快满时,可以先手动释放空间。注意不要用rm直接删正在被进程占用的日志,而应该用重定向清空:
# 安全清空日志文件 > /var/log/heavy_app.log # 查看磁盘占用 df -h
调整应用日志级别
在代码或配置中,将生产环境的日志级别由debug改为info或warn,可以大幅减少输出量。例如Java应用可在logback.xml里修改:
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>/var/log/app.log</file>
<encoder>
<pattern>%d %level %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="FILE" />
</root>
</configuration>
用定时任务兜底
除了logrotate,也可以写简单脚本配合cron使用:
# 删除30天前的旧日志 find /var/log/myapp -name "*.log" -mtime +30 -delete
综合使用上述方法,就能稳妥地解决Linux服务器日志溢出问题,保障业务持续运行。