温馨提示×

tomcat日志如何按天切割

小樊
46
2026-08-20 15:41:36
栏目: 智能运维

Tomcat 本身没有内置按天自动切割日志的功能,需要借助外部方式来实现。下面按常见方案推荐程度给你说明,并附上可直接用的配置示例。


✅ 推荐方案一:使用 logrotate(Linux 生产环境首选)

这是最常用、最稳定的方式,适合 catalina.out 这种持续写入的日志。

1️⃣ 创建 logrotate 配置文件

vim /etc/logrotate.d/tomcat

2️⃣ 示例配置(按天切割)

/opt/tomcat/logs/catalina.out {
    daily
    rotate 30
    missingok
    notifempty
    compress
    copytruncate
    dateext
    dateformat -%Y-%m-%d
}

配置说明

参数 作用
daily 按天切割
rotate 30 保留 30 天
compress 压缩旧日志
copytruncate 不重启 Tomcat(复制后清空)
dateext 日志带日期后缀
missingok 日志不存在不报错

3️⃣ 测试是否生效

logrotate -d /etc/logrotate.d/tomcat

✅ 第二天即可看到类似:

catalina.out-2026-01-21.gz

✅ 推荐方案二:使用 cronolog(老项目常见)

1️⃣ 安装 cronolog

yum install cronolog -y
# 或
apt install cronolog -y

2️⃣ 修改 catalina.sh

找到:

org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 &

修改为:

org.apache.catalina.startup.Bootstrap "$@" start \
| /usr/bin/cronolog "$CATALINA_BASE/logs/catalina.%Y-%m-%d.out" >> /dev/null 2>&1 &

✅ 效果:

catalina.2026-01-21.out
catalina.2026-01-22.out

⚠️ 缺点:需要改 Tomcat 启动脚本,升级时需注意


✅ 推荐方案三:使用 logging.properties(仅限 localhost_access_log)

Tomcat 自带的 AccessLogValve 支持按天切割。

server.xml 示例

<Valve className="org.apache.catalina.valves.AccessLogValve"
       directory="logs"
       prefix="localhost_access_log"
       suffix=".txt"
       pattern="%h %l %u %t "%r" %s %b"
       rotatable="true"
       fileDateFormat="yyyy-MM-dd" />

✅ 输出:

localhost_access_log.2026-01-21.txt

⚠️ 注意:不能切割 catalina.out


❌ 不推荐方案

方案 原因
自己写 shell 定时清空 容易丢日志
修改 logging.properties 切 catalina.out 不生效
用 log4j 切 catalina.out 不适合标准 Tomcat

✅ 最佳实践总结

场景 推荐方案
catalina.out ✅ logrotate
访问日志 ✅ AccessLogValve
老系统 cronolog
Docker 输出到 stdout + 宿主机 logrotate

如果你愿意,可以告诉我:

  • ✅ Tomcat 版本
  • ✅ Linux 发行版
  • ✅ 是切割 catalina.out 还是 access log

我可以给你完全贴合你环境的配置

0