温馨提示×

ubuntu tomcat日志如何轮转

小樊
48
2026-08-31 11:36:49
栏目: 智能运维

在 Ubuntu 上 Tomcat 日志轮转(log rotation) 常见有 三种做法,推荐按生产环境选择。


一、使用 Ubuntu 自带的 logrotate(✅ 推荐)

Tomcat 默认日志通常位于:

/var/log/tomcat9/     # 版本不同可能是 tomcat8 / tomcat10

1️⃣ 创建 logrotate 配置文件

sudo vim /etc/logrotate.d/tomcat

示例配置(通用、安全):

/var/log/tomcat*/catalina.out {
    daily
    rotate 7
    missingok
    notifempty
    compress
    delaycompress
    copytruncate
    dateext
    dateformat -%Y%m%d
}

如果你还有其他日志:

/var/log/tomcat*/localhost.*
/var/log/tomcat*/manager.*
/var/log/tomcat*/host-manager.* {
    daily
    rotate 7
    missingok
    notifempty
    compress
    delaycompress
    copytruncate
}

2️⃣ 参数说明(重点)

参数 作用
daily 每天轮转
rotate 7 保留 7 份
compress 压缩旧日志
copytruncate 不重启 Tomcat 直接截断日志 ✅
dateext 文件名带日期

⚠️ Tomcat 不会自动重新打开 catalina.out,所以 copytruncate 非常重要。


3️⃣ 测试 logrotate 是否生效

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

手动执行一次:

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

检查:

ls -lh /var/log/tomcat*/

二、使用 Tomcat 自带的 logging.properties(不太推荐)

Tomcat 使用 java.util.logging,但 不支持自动轮转 catalina.out

修改:

/etc/tomcat9/logging.properties

示例(仅对 catalina.YYYY-MM-DD.log 有效):

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

缺点

  • 不会轮转 catalina.out
  • 配置复杂
  • 不如 logrotate 直观

三、使用 logback / log4j2(✅ 生产环境最佳实践)

如果你使用的是 Spring Boot / 自定义 Tomcat

logback 示例

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

    <root level="INFO">
        <appender-ref ref="FILE"/>
    </root>
</configuration>

✅ 优点:

  • 不依赖系统
  • 精确控制大小 / 时间
  • 不影响 catalina.out

四、常见问题

❓ catalina.out 越来越大怎么办?

✅ 正确做法:

  • logrotate + copytruncate
  • 或 重定向到 /dev/null
  • 或 使用 logback 不写 catalina.out

❌ 错误做法:

  • 手动 rm catalina.out
  • 直接 echo > catalina.out(可能锁文件)

❓ 是否需要重启 Tomcat?

方式 是否重启
logrotate + copytruncate
logrotate + reload
logging.properties
logback / log4j2

五、推荐组合(总结)

标准 Tomcat(apt 安装)

logrotate + copytruncate

Spring Boot / 自定义应用

logback / log4j2

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

  • Ubuntu 版本
  • Tomcat 版本
  • 是否有 Spring Boot

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

0