温馨提示×

linux下tomcat日志分割法

小樊
38
2026-10-11 12:05:00
栏目: 智能运维

在 Linux 下,Tomcat 日志(主要是 catalina.out)如果长期不分割,会变得非常大,影响排查和维护。下面介绍几种常用且实用的 Tomcat 日志分割方案,从简单到专业。


一、使用 cronolog(最常用、简单)

1. 安装 cronolog

# CentOS
yum install cronolog -y

# Ubuntu / Debian
apt-get install cronolog -y

2. 修改 Tomcat 启动脚本

编辑 bin/catalina.sh

找到这一行(大约在 400 行左右):

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

改为:

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

3. 重启 Tomcat

bin/shutdown.sh
bin/startup.sh

✅ 效果:

logs/catalina.2025-01-21.out
logs/catalina.2025-01-22.out

二、使用 logrotate(系统级,推荐)

适合已有大日志文件的情况。

1. 创建 logrotate 配置

vi /etc/logrotate.d/tomcat

内容示例:

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

2. 参数说明

  • daily:每天分割
  • rotate 30:保留 30 天
  • compress:压缩旧日志
  • copytruncate:不重启 Tomcat 直接截断

3. 手动测试

logrotate -f /etc/logrotate.d/tomcat

✅ 无需修改 Tomcat 配置


三、使用 log4j / logback(应用级日志)

如果你控制应用代码:

logback 示例

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/app.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
</appender>

✅ 适合业务日志,不适合 catalina.out


四、使用 rotatelogs(Apache 自带)

类似 cronolog:

| /usr/sbin/rotatelogs "$CATALINA_BASE/logs/catalina.%Y%m%d.out" 86400

五、方案对比建议

方案 是否改 Tomcat 是否重启 推荐度
cronolog ✅ ✅ ⭐⭐⭐⭐
logrotate ❌ ❌ ⭐⭐⭐⭐⭐
logback ✅ ✅ ⭐⭐⭐
rotatelogs ✅ ✅ ⭐⭐⭐

六、生产环境推荐组合

✅ logrotate(catalina.out) + logback(业务日志)

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

  • Tomcat 版本
  • 是否已使用 systemd
  • 是否 Docker 环境

我可以给你定制化配置。

0 踩