在 CentOS 上清理 Java 日志文件,通常取决于日志生成方式(如 Tomcat、Spring Boot、log4j/logback、系统 journal 等)。下面按常见场景给你一套实用方案。
/var/log/
/usr/local/tomcat/logs/
/opt/*/logs/
~/app/logs/
find / -name "*.log" 2>/dev/null | grep -E "java|tomcat|spring"
或按大小排序:
du -sh /var/log/* | sort -h
find /path/to/logs -name "*.log*" -mtime +30 -delete
示例(Tomcat):
find /usr/local/tomcat/logs -name "*.log" -mtime +30 -delete
find /usr/local/tomcat/logs -name "*.txt" -mtime +30 -delete
> /path/to/app.log
或
truncate -s 0 /path/to/app.log
⚠️ 不要用 rm 删正在写入的日志,可能导致 Java 进程不释放磁盘空间。
cd /usr/local/tomcat/logs
rm -f catalina.*.log
rm -f localhost.*.log
rm -f host-manager.*.log
rm -f manager.*.log
在 bin/catalina.sh 中:
CATALINA_OUT=/dev/null
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<DefaultRolloverStrategy max="30"/>
vi /etc/logrotate.d/java-app
示例:
/opt/app/logs/*.log {
daily
rotate 30
compress
missingok
notifempty
copytruncate
}
logrotate -d /etc/logrotate.d/java-app
journalctl --disk-usage
journalctl --vacuum-time=7d
df -h
lsof | grep deleted
如果有 deleted 文件未释放:
systemctl restart tomcat
# 或重启 Java 服务
✅ 小项目:find + rm
✅ 生产环境:logrotate
✅ Spring Boot:logback/log4j2 自动滚动
❌ 不要直接 rm 正在写的日志
如果你能告诉我:
我可以给你精准清理命令。