在 CentOS 系统中,Java 应用运行时间一长,日志文件便会像秋天的落叶般越积越多。若不及时清理,磁盘空间告急几乎是必然结果。如何高效管理这些日志?通常不外乎三种方案:手动直接删除、借助日志轮转工具自动处理、或者编写脚本定期执行清理。下面逐一详细解析。

方法一:手动删除日志文件
最直接的方式,就是定位日志目录,然后移除不需要的文件。具体操作步骤如下:
首先找到日志所在目录。通常 Java 应用的日志会存放在
/var/log/myapp/或/opt/myapp/logs/这类路径下,具体取决于部署时的配置。使用
rm命令清理旧日志。例如,要删除所有.log文件,可以执行:sudo rm -rf /path/to/logs/*.log注意
-rf参数威力较大,操作前务必确认路径无误,避免误删关键数据。若想保留备份,可先压缩再删除。比如打包成带时间戳的
.tar.gz文件:sudo tar -czvf /path/to/logs/$(date +%Y%m%d%H%M%S).tar.gz /path/to/logs/*.log打包完成后,将压缩包移除以释放磁盘空间:
sudo rm -rf /path/to/logs/*.tar.gz
方法二:使用日志轮转工具(Logrotate)
手动删除终究不够高效,推荐使用 CentOS 系统自带的 Logrotate 工具进行自动化管理。它能够根据配置自动压缩、轮转和清理旧日志,省心且可靠。
首先确认系统是否已安装
logrotate,若未安装则执行:sudo yum install logrotate为你的应用创建专门的配置文件,例如
/etc/logrotate.d/myapp,写入以下内容:/path/to/logs/*.log { daily rotate 7 compress missingok notifempty create 640 root adm }配置项说明:
daily:每日轮转一次。rotate 7:保留最近 7 天的日志文件。compress:对旧日志进行 gzip 压缩。missingok:日志文件不存在时不报错。notifempty:空文件不触发轮转。create 640 root adm:轮转后新建日志文件,权限 640,属主 root,属组 adm。
测试配置文件是否生效:
sudo logrotate -f /etc/logrotate.conf
方法三:使用脚本自动化清理
如果 Logrotate 的灵活性无法满足特殊需求,或者你希望对某些日志制定更精细的清理规则,可以自行编写脚本并配合 cron 定时任务执行。
创建脚本文件,例如
clean_logs.sh:#!/bin/bash LOG_DIR="/path/to/logs" LOG_FILES=$(ls $LOG_DIR/*.log) YESTERDAY=$(date -d "yesterday" +%Y%m%d) for LOG_FILE in $LOG_FILES; do LOG_NAME=$(basename $LOG_FILE) if [[ $LOG_NAME == *$YESTERDAY* ]]; then sudo rm -f $LOG_FILE fi done该脚本的核心逻辑:遍历日志目录下所有
.log文件,若文件名包含昨天的日期,则将其删除。你可以根据实际需求调整匹配规则。为脚本添加可执行权限:
chmod +x clean_logs.sh设置 cron 定时任务,例如每天凌晨 1 点执行:
crontab -e添加如下一行:
0 1 * * * /path/to/clean_logs.sh
以上三种方法各有所长:手动删除适合应急场景,Logrotate 是生产环境的标配方案,脚本则满足定制化需求。根据实际情况灵活选用,Java 日志管理便不再是令人头疼的难题。
