温馨提示×

linux下tomcat日志如何切割

小樊
41
2026-09-20 21:50:29
栏目: 智能运维

在 Linux 下,Tomcat 自身默认不会自动切割日志,常见的日志切割方案有以下几种,按“推荐程度”给你说明:


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

logrotate 是 Linux 自带的日志管理工具,稳定、无需改代码。

1. 示例配置

新建文件:

/etc/logrotate.d/tomcat

内容示例(以 catalina.out 为例):

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

2. 参数说明

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

3. 手动测试

logrotate -d /etc/logrotate.d/tomcat   # 测试
logrotate -f /etc/logrotate.d/tomcat   # 强制执行

优点:简单、安全、生产环境常用
缺点:不是实时切割


二、使用 cronolog(老方案,逐步淘汰)

1. 安装

yum install cronolog
# 或
apt install cronolog

2. 修改 catalina.sh

找到:

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" &

✅ 按天生成日志
❌ 需要改启动脚本,Tomcat 升级需注意


三、使用 Log4j / Logback(✅ 推荐用于业务日志)

如果你用的是 Spring Boot / 自定义日志

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


四、Tomcat 自带 AsyncFileHandler(有限)

Tomcat 8+ 支持:

handlers = 1catalina.org.apache.juli.AsyncFileHandler

仍不自动切割 catalina.out


五、生产环境最佳实践 ✅

日志类型 方案
catalina.out logrotate
access log Tomcat AccessLogValve
业务日志 Logback

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

  • Tomcat 版本
  • 是否 Docker
  • 想按「大小」还是「时间」切

我可以直接给你一套可直接用的配置

0