在 CentOS 上清理 Java 日志,需要根据日志类型和产生方式来处理。下面按常见场景给你一套安全、可操作的清理方案。
一、先确认 Java 日志在哪里
1️⃣ 常见 Java 日志位置
/var/log/
/usr/local/xxx/logs/
/opt/xxx/logs/
~/logs/
常见文件名:
catalina.out(Tomcat)app.logspring.logserver.loggc.log*.log.*
二、临时清理(立即释放空间)
✅ 方法 1:清空日志文件(推荐)
不要直接 rm 正在写入的日志文件
# 清空 catalina.out
: > /opt/tomcat/logs/catalina.out
# 清空所有 .log 文件
for f in /opt/app/logs/*.log; do
: > "$f"
done
✅ 优点:
- 应用不中断
- 文件句柄不丢失
❌ 不推荐方式
rm -f app.log
⚠️ 如果应用还在写日志,磁盘空间不会释放,必须重启应用。
三、删除历史日志(旧文件)
1️⃣ 删除 7 天前的日志
find /opt/app/logs -name "*.log*" -mtime +7 -delete
2️⃣ 只删除 .gz 压缩日志
find /opt/app/logs -name "*.gz" -mtime +7 -delete
四、Tomcat 日志清理(最常见)
Tomcat 日志目录
/opt/tomcat/logs/
清理 catalina.out
: > /opt/tomcat/logs/catalina.out
删除旧日志
find /opt/tomcat/logs -name "*.log" -mtime +7 -delete
find /opt/tomcat/logs -name "*.txt" -mtime +7 -delete
五、Java GC 日志清理
GC 日志示例
gc.log
gc.log.0
gc.log.1
清理:
find / -name "gc.log*" -mtime +7 -delete
✅ 建议 JVM 参数:
-Xlog:gc*:file=/var/log/gc.log:time,uptime,level,tags:filecount=5,filesize=10M
六、自动清理(长期方案 ✅)
1️⃣ 使用 logrotate(强烈推荐)
创建配置:
vim /etc/logrotate.d/java-app
示例:
/opt/app/logs/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
立即测试:
logrotate -f /etc/logrotate.d/java-app
七、Docker / Kubernetes 场景
Docker
docker logs --tail 100 容器名
docker system prune -f
K8s
kubectl logs pod名 > /dev/null
八、清理前必做检查(避免背锅)
df -h
du -sh /var/log/*
lsof | grep deleted
九、推荐清理策略(总结)
✅ 生产环境最佳实践
- ✅ 使用
: > file清空日志 - ✅ 使用
logrotate自动轮转 - ✅ 不要直接
rm正在写入的日志 - ✅ 定期删除 7~30 天前的日志
如果你愿意,可以告诉我:
- ✅ Java 应用类型(Spring Boot / Tomcat / 自研)
- ✅ CentOS 版本
- ✅ 日志路径
我可以帮你定制一套完整清理方案。