日志爆满需先定位再清理并配置轮转:用du、find查大日志,按时间/命名删除或truncate清空,配logrotate每日轮转保留14天,调低日志级别、关闭冗余日志、定期执行清理脚本。

日志爆满是Linux服务异常的常见诱因,尤其在长期运行的生产环境中。问题核心不是“能不能删”,而是“删什么、怎么删、删完怎么防”。重点在于快速释放空间的同时,避免误删关键日志或引发服务中断。
? 快速定位日志元凶
别盲目清理,先用命令揪出真正占空间的日志位置:
-
看整体分布:运行
du -sh /var/log/* | sort -rh | head -10,一眼看出哪个子目录最吃空间(如/var/log/tomcat、/var/log/docker/containers) -
找单个大文件:执行
find /var/log -type f -name "*.log" -size +100M -ls | sort -k7nr | head -5,直接列出超100MB的日志及其大小 -
查Docker容器日志:很多爆满其实是JSON日志撑爆的,运行
du -sh /var/lib/docker/containers/*/*-json.log 2>/dev/null | sort -rh | head -3
?️ 安全清理已确认无用的日志
确认某类日志(如旧访问日志、调试日志)已无分析价值后,再执行清理:
-
按时间删:删除30天前的所有
.log文件:find /var/log -name "*.log" -mtime +30 -delete -
按命名删:比如只留最近7天的Nginx日志:
find /var/log/nginx -name "access.log.*" -mtime +7 -delete -
清空而非删除:对正在被进程写入的日志(如
app.log),用truncate -s 0 /var/log/app/app.log更安全,不中断服务
⚙️ 立即启用日志轮转(logrotate)
手动清理只是救急,必须配置自动轮转防止复发。以Tomcat为例,在 /etc/logrotate.d/tomcat 中写入:
/var/log/tomcat/*.log {
daily
rotate 14
compress
missingok
notifempty
create 644 tomcat tomcat
sharedscripts
postrotate
if [ -f /var/run/tomcat.pid ]; then
kill -USR1 `cat /var/run/tomcat.pid` 2>/dev/null || true
fi
endscript
}保存后立即生效:sudo logrotate -f /etc/logrotate.d/tomcat。该配置每天轮转、保留14天、自动压缩、不报错退出。
?️ 长效防护建议
光清日志不够,要从源头控量:
-
调低应用日志级别:检查
logback.xml或logging.properties,把DEBUG改为INFO或WARN -
关闭冗余日志:如Nacos中设
server.tomcat.accesslog.enabled=false;Docker启动时加--log-driver=local --log-opt max-size=50m --log-opt max-file=3 -
定期验证清理脚本:把清理命令写成脚本,用
crontab -e加入0 2 * * * /usr/local/bin/clean-logs.sh,每天凌晨2点自动执行










