温馨提示×

怎样清理Debian Tomcat过期日志

小樊
41
2025-10-18 12:32:33
栏目: 智能运维

1. 手动清理过期日志(一次性操作)
停止Tomcat服务以避免清理过程中产生新日志:

sudo systemctl stop tomcat

定位Tomcat日志目录(默认路径通常为/var/log/tomcat/opt/tomcat/logs/usr/local/tomcat/logs,可通过sudo find / -name "catalina.out"确认);
使用find命令删除指定天数前的日志文件(例如删除30天前的.log.txt文件):

sudo find /path/to/tomcat/logs -type f -name "catalina.*.log" -mtime +30 -exec rm -rf {} \;
sudo find /path/to/tomcat/logs -type f -name "localhost.*.log" -mtime +30 -exec rm -rf {} \;
sudo find /path/to/tomcat/logs -type f -name "localhost_access_log.*.txt" -mtime +30 -exec rm -rf {} \;

恢复Tomcat服务:

sudo systemctl start tomcat

注意:操作前建议备份重要日志(如cp -r /path/to/tomcat/logs /backup/tomcat_logs_$(date +%F))。

2. 使用logrotate自动轮转与清理(推荐)
logrotate是Linux系统自带的日志管理工具,可实现日志自动分割、压缩和删除。
安装logrotate(若未安装):

sudo apt-get update && sudo apt-get install logrotate

创建Tomcat专用配置文件/etc/logrotate.d/tomcat,添加以下内容(根据实际路径调整):

/path/to/tomcat/logs/catalina.out {
    daily                   # 每天轮转一次
    rotate 7                # 保留最近7个日志文件
    compress                # 压缩旧日志(节省空间)
    missingok               # 若日志不存在也不报错
    notifempty              # 若日志为空则不轮转
    copytruncate            # 复制原日志后清空,避免重启Tomcat
}

测试配置是否正确(模拟运行,不实际修改文件):

sudo logrotate -d /etc/logrotate.d/tomcat

强制立即执行轮转(可选):

sudo logrotate -f /etc/logrotate.d/tomcat

logrotate会自动添加到系统cron任务中,无需额外设置定时任务。

3. 编写Shell脚本+定时任务自动化清理
创建清理脚本(如/usr/local/bin/clean_tomcat_logs.sh),内容如下(替换为实际日志路径):

#!/bin/bash
LOG_DIR="/path/to/tomcat/logs"
find "$LOG_DIR" -type f -name "*.log" -mtime +30 -exec rm -f {} \;
find "$LOG_DIR" -type f -name "*.txt" -mtime +30 -exec rm -f {} \;

赋予脚本执行权限:

sudo chmod +x /usr/local/bin/clean_tomcat_logs.sh

设置cron定时任务(例如每天凌晨0点执行):

sudo crontab -e

添加以下行:

0 0 * * * /usr/local/bin/clean_tomcat_logs.sh

保存后cron会自动执行脚本,无需手动干预。

4. 配置Tomcat内置日志轮转(可选补充)
修改Tomcat的conf/logging.properties文件,启用日志滚动(适用于应用层日志,如catalina.out以外的日志):

1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 30  # 保留30天日志
1catalina.org.apache.juli.AsyncFileHandler.rotatable = true  # 启用滚动

修改conf/server.xml中的AccessLogValve(针对访问日志):

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
       prefix="localhost_access_log" suffix=".txt"
       pattern="%h %l %u %t "%r" %s %b" 
       maxDays="30"  <!-- 保留30天访问日志 -->
       rotatable="true"/>

重启Tomcat使配置生效:

sudo systemctl restart tomcat

注意:此方法需Tomcat版本支持,且对catalina.out文件的轮转效果有限,建议配合logrotate使用。

注意事项

  • 清理前务必确认日志文件无重要信息,避免误删;
  • 生产环境中建议保留至少7-15天的日志(可根据业务需求调整maxDays-mtime参数);
  • 若使用copytruncate方式,需确保Tomcat对日志文件有写入权限;
  • 定期检查日志清理脚本和配置的有效性(如通过ls -lh /path/to/tomcat/logs查看日志文件大小和数量)。

0