CentOS系统上,Ja va应用日志的清理是一个绕不开的运维课题。日志文件如果不加控制,很快就会把磁盘空间吃满,甚至影响应用正常运行。下面这套策略,从系统级到应用级、从自动到手动,覆盖了最常见的场景,可以直接拿来用。

1. 使用logrotate工具进行日志轮转(系统级推荐)
logrotate是CentOS自带的日志管理工具,可以自动完成日志轮转、压缩、删除等操作。对于大多数Ja va应用(比如Tomcat、Spring Boot)的日志文件(*.log),它都能很好地接管。
- 安装logrotate:如果系统中没有安装,执行
sudo yum install logrotate即可。 - 配置logrotate:创建或编辑
/etc/logrotate.d/ja va文件,加入以下规则(以Ja va日志目录/var/log/ja va-app/为例):
/var/log/ja va-app/*.log {
daily # 按天轮转(也可以改成weekly/monthly)
rotate 7 # 保留7天的日志(根据磁盘空间调整,比如30天)
compress # 压缩旧日志,默认用gzip
missingok # 日志文件不存在时不报错
notifempty # 日志为空时不轮转
create 0644 root root # 轮转后创建新日志文件,设置权限
}
- 测试与生效:先用
logrotate -d /etc/logrotate.d/ja va测试配置是否正确,没问题的话,执行sudo systemctl reload logrotate重新加载配置,规则就生效了。
2. 调整Ja va应用日志框架配置(应用级精准控制)
通过Log4j、Logback这些日志框架的配置文件,可以让应用自身管理日志的轮转和清理,避免日志无限增长。这种方式更精准,直接跟应用绑定。
- Logback配置示例(
logback.xml):
/var/log/ja va-app/app.log
/var/log/ja va-app/app-%d{yyyy-MM-dd}.log
30
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
- Log4j2配置示例(
log4j2.xml):
以上两个配置都能实现每日滚动日志、保留30天历史日志,并自动压缩旧日志(Logback默认压缩,Log4j2需要加上.gz后缀才能触发压缩)。
3. 手动清理临时日志(应急处理)
有时候日志文件会异常增长,比如一下子超过1GB,这时候需要快速腾出空间。可以用下面这些命令应急处理。
- 删除指定目录下30天前的日志:
find /var/log/ja va-app/ -type f -name "*.log" -mtime +30 -exec rm -f {} \;
- 清空当前日志文件(不删除文件,只清空内容):
> /var/log/ja va-app/app.log
注意:手动清理之前,最好确认日志文件没有被应用写入,否则可能丢数据或导致文件句柄异常。
4. 调整Ja va日志级别(减少日志生成量)
从源头上控制日志量,最直接的方式就是调整日志级别。比如把DEBUG改成INFO或WARN,能有效减少不必要的日志输出,磁盘压力自然就小了。
- Logback调整示例(
logback.xml):
- Log4j2调整示例(
log4j2.xml):
这个做法在生产环境特别实用,避免大量DEBUG日志蚕食磁盘空间。
5. 使用journalctl管理systemd服务的Ja va日志
如果Ja va应用是通过systemd服务启动的(比如tomcat.service),那么可以用journalctl工具来管理它的控制台输出日志。
- 清空所有journal日志:
sudo journalctl --vacuum-time=1w # 只保留最近1周的日志
sudo journalctl --vacuum-size=500M # 只保留500MB以内的日志
- 查看Ja va服务日志:
journalctl -u ja va-app.service -f # 实时查看指定服务的日志
这个方法只适用于通过systemd启动的Ja va应用,但胜在简单高效,能直接管理控制台输出的日志量。