温馨提示×

linux tomcat日志如何分割

小樊
37
2026-10-26 03:33:52
栏目: 智能运维

在 Linux 下对 Tomcat 日志进行分割(避免 catalina.out 无限增大),常见有以下几种做法,按推荐程度从简单到专业给你说明。


一、使用 logrotate(✅ 最推荐,系统级方案)

Tomcat 官方和大多数生产环境都使用 logrotate。

1️⃣ 创建 logrotate 配置

vi /etc/logrotate.d/tomcat

示例(假设 Tomcat 在 /opt/tomcat):

/opt/tomcat/logs/catalina.out {
    daily
    rotate 7
    missingok
    notifempty
    compress
    copytruncate
}

参数说明

  • daily:每天分割
  • rotate 7:保留 7 份
  • compress:压缩旧日志
  • copytruncate:复制后清空原文件(Tomcat 不重启也能用)

2️⃣ 手动测试

logrotate -d /etc/logrotate.d/tomcat   # 模拟执行
logrotate -f /etc/logrotate.d/tomcat   # 强制执行

✅ 优点

  • 不依赖 Tomcat 配置
  • 稳定、系统级支持
  • 不需要重启服务

二、使用 cronolog(老方案,仍可用)

1️⃣ 安装

yum install cronolog        # CentOS
apt install cronolog        # Ubuntu

2️⃣ 修改 Tomcat 启动脚本

编辑 bin/catalina.sh:

找到:

>> "$CATALINA_OUT" 2>&1 &

改为:

2>&1 | /usr/sbin/cronolog /opt/tomcat/logs/catalina.%Y-%m-%d.out &

✅ 效果:

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

⚠️ 缺点:需修改启动脚本,Tomcat 升级可能覆盖


三、使用 logging.properties(JUL 自带,功能弱)

Tomcat 默认使用 java.util.logging,可配置大小滚动:

conf/logging.properties

1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.

⚠️ 对 catalina.out 无效,只影响 catalina.log


四、使用 Log4j2(✅ 专业方案,适合开发团队)

如果你用 Spring Boot 或已集成 Log4j2:

<RollingFile name="CATALINA"
             fileName="${sys:catalina.base}/logs/catalina.log"
             filePattern="${sys:catalina.base}/logs/catalina.%d{yyyy-MM-dd}.log.gz">
    <SizeBasedTriggeringPolicy size="100MB"/>
    <TimeBasedTriggeringPolicy/>
</RollingFile>

✅ 可按大小 + 时间切割
❌ 配置复杂


五、总结建议

场景 推荐方案
生产环境 ✅ logrotate
老系统 cronolog
开发调试 logging.properties
大型项目 Log4j2

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

  • Tomcat 版本
  • Linux 发行版
  • 是否 Docker

我可以给你可直接用的完整配置。

0 踩