一、前言:为什么必须分割 catalina.out
Tomcat 的catalina.out是服务器运行的核心日志,默认会持续累积且不自动分割。在生产环境中,该文件极易膨胀至数十 GB,不仅占用磁盘空间,还会导致日志查看卡顿、磁盘 IO 飙升,甚至因文件过大出现 Tomcat 日志输出异常的问题。而 Linux 系统自带的logrotate工具,无需修改 Tomcat 配置、无需重启服务,是实现catalina.out日志分割的最优方案。
二、方案优势(生产环境首选)
-
✅ 零侵入无风险:无需修改 Tomcat 核心配置,无需重启服务,不影响业务运行。
-
✅ 自动定时执行:系统自带定时任务,默认每日凌晨自动触发,无需额外配置定时脚本。
-
✅ 灵活策略配置:支持按天分割、日期命名、自动压缩、过期清理,满足 7 个月长期留存需求。
-
✅ 权限安全可控:可自定义日志文件权限,防止普通用户篡改日志
-
✅ Linux自带工具 :
logrotate
三、完整配置步骤(直接复制即用)
1. 创建 logrotate 配置文件
执行命令,新建 Tomcat 专属日志轮转配置:
vim /etc/logrotate.d/tomcat
2. 写入核心配置(适配 7 个月留存)
粘贴以下内容,务必将日志路径替换为你服务器实际的catalina.out路径:
# 替换为你的catalina.out实际路径
/usr/local/tomcat/logs/catalina.out {
daily # 每天分割一次
dateext # 关键参数:强制使用日期作为后缀,禁用数字编号(.1/.2)
dateformat .%Y-%m-%d # 分割后文件名带日期(如catalina.out.2026-05-22)
rotate 210 # 保留210天(7个月)日志,超期自动删除
compress # 自动压缩旧日志(.gz格式,节省空间)
delaycompress # 延迟压缩,不影响当前日志使用
copytruncate # 复制原日志后清空,无需重启Tomcat(核心参数)
missingok # 日志文件不存在时不报错
notifempty # 日志为空时不执行分割
create 0644 root root # 新建日志文件权限644,属主root(安全可控)
}
3. 配置参数逐行解析(一目了然)
| 参数 | 作用说明 |
|---|---|
/usr/local/tomcat/logs/catalina.out |
指定待分割的日志文件绝对路径 |
daily |
轮转周期为每天,可选weekly/monthly |
dateext |
强制启用日期后缀,彻底禁用 .1/.2/.3 数字命名,所有日志统一按日期格式生成 |
dateformat .%Y-%m-%d |
定义日期后缀格式,生成catalina.out.2026-05-22.gz |
rotate 210 |
保留 210 个历史日志(7 个月),超出自动删除 |
compress |
用 gzip 压缩分割后的日志,减少磁盘占用 |
copytruncate |
核心参数:复制原日志内容后清空原文件,Tomcat 持续写入不中断 |
missingok |
日志文件丢失时不抛出异常,避免定时任务报错 |
notifempty |
当日志文件为空时,不执行分割操作,避免无效文件 |
create 0644 root root |
分割后新建空日志文件,权限为-rw-r--r--,仅 root 可读写,其他用户只读 |
4. 配置生效与测试(无需等待凌晨)
(1)校验配置语法(无报错则配置正确)
logrotate -d /etc/logrotate.d/tomcat
- 输出无
error提示,说明配置格式无误。
(2)手动强制触发分割(立即验证效果)
logrotate -f /etc/logrotate.d/tomcat
(3)查看分割结果
进入日志目录,查看文件列表:
cd /usr/local/tomcat/logs ll
-
效果展示:
-
catalina.out:当前正在写入的空日志文件(权限0644)。 -
catalina.out.2026-05-22.gz:已分割并压缩的历史日志(日期为当天)。
-
四、长期运行效果与维护说明
1. 日常运行状态
-
每日凌晨自动分割,生成带日期的压缩日志,目录始终保留210 个以内日志文件(7 个月量)。
-
单目录存 210 个文件对系统无负面影响:ext4/xfs 文件系统单目录默认支持数万文件,不会出现检索卡顿、性能下降问题。
2. 日志权限安全
0644权限(-rw-r--r--)安全性充足:
-
root 用户:可读、可写、可删除。
-
普通用户:仅可读,无法修改、删除日志,防止日志被篡改或误删。
3. 无需额外维护
配置完成后,logrotate作为系统自带服务会永久生效,无需手动干预,仅需定期查看磁盘空间即可。
五、常见问题与避坑指南
1. 分割后 Tomcat 不写入日志
-
原因:未配置
copytruncate参数,或配置错误。 -
解决:确保配置中包含
copytruncate,该参数是实现 "零重启分割" 的核心。
2. 日志未按日期命名
-
原因:缺少
dateformat .%Y-%m-%d参数。 -
解决:添加该参数,确保分割后文件名带日期,便于按天排查问题
3. 历史日志未自动删除
-
原因:
rotate数值设置过大,或磁盘空间不足。 -
解决:确认
rotate 210配置无误,清理磁盘冗余空间,确保 logrotate 有删除权限。
六、总结
通过logrotate配置catalina.out日志分割,是生产环境 Tomcat 日志管理的最优解 。该方案兼具稳定性、安全性和便捷性,无需重启服务、无需复杂脚本,仅需简单配置即可实现 "每日分割、自动压缩、7 个月留存、零风险运行" 的核心需求,彻底解决catalina.out日志膨胀问题,保障 Tomcat 服务稳定运行。