CentOS 上 Java 日志过大的原因很多,通常不是系统问题,而是 Java 应用、框架或日志配置导致的。下面按常见原因 → 排查方法 → 解决建议来说明。
常见框架:Log4j、Log4j2、Logback
典型问题:
DEBUG / INFO 级别输出大量日志app.log示例问题配置:
<File>app.log</File>
❌ 没有滚动策略
如果你开启了 GC 日志但未限制大小:
-Xlog:gc*:file=gc.log
或旧版本:
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log
➡ GC 日志会持续增长
catalina.out 永不滚动例如:
e.printStackTrace()while (true) {
log.info("retry...");
}
rsyslogdf -h
du -sh /var/log/*
du -sh /opt/*/logs
find / -type f -name "*.log" -size +500M 2>/dev/null
常见大日志:
catalina.outapp.loggc.logspring.log原因:
解决:
1️⃣ 使用 cronolog 或 logrotate
2️⃣ 不要往 stdout 打日志
示例 logrotate:
/opt/tomcat/logs/catalina.out {
copytruncate
daily
rotate 7
compress
missingok
}
推荐配置(application.yml):
logging:
file:
name: /opt/app/logs/app.log
logback:
rollingpolicy:
max-file-size: 50MB
max-history: 7
正确方式(JDK 11+):
-Xlog:gc*,gc+heap=info:file=gc.log:time,level,tags:filecount=5,filesize=10M
<RollingFile name="File" fileName="app.log"
filePattern="app-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %c - %m%n</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="100 MB"/>
<TimeBasedTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
# 清空文件(不删文件)
: > catalina.out
: > app.log
或:
truncate -s 0 app.log
⚠ 不要直接 rm,否则需要重启 Java 才能释放磁盘
INFO 或 WARNlogrotate 兜底如果你愿意,可以告诉我:
我可以 直接帮你给出一份可用的日志配置。