温馨提示×

Debian怎么分割Tomcat日志

小樊
46
2026-07-13 09:06:18
栏目: 智能运维

在 Debian 上分割(切割、轮转)Tomcat 日志,常用且推荐的方式是 使用 logrotate,这是 Debian/Ubuntu 系统自带的日志管理工具,专门用来做日志轮转、压缩、删除。

下面按常见场景给你完整说明。


一、Tomcat 常见日志文件

Tomcat 默认日志通常在:

/opt/tomcat/logs/
# 或
/var/log/tomcat9/

常见日志:

  • catalina.out(最重要,通常无限增长)
  • localhost.log
  • manager.log
  • host-manager.log
  • access.log

二、使用 logrotate 分割 Tomcat 日志(推荐 ✅)

1️⃣ 安装 logrotate(一般已安装)

dpkg -l | grep logrotate

如果没有:

sudo apt update
sudo apt install logrotate

2️⃣ 创建 Tomcat 专用 logrotate 配置

sudo nano /etc/logrotate.d/tomcat

✅ 示例(适用于 catalina.out

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

参数说明

参数 说明
daily 每天切割
rotate 7 保留 7 份
missingok 日志不存在也不报错
notifempty 空文件不切割
compress 压缩旧日志
copytruncate 复制后清空原文件(Tomcat 不用重启)
dateext 使用日期作为后缀

生成文件示例:

catalina.out-2026-01-21.gz

3️⃣ 多日志一起切割(推荐)

/opt/tomcat/logs/catalina.out
/opt/tomcat/logs/localhost.log
/opt/tomcat/logs/manager.log
/opt/tomcat/logs/host-manager.log
{
    daily
    rotate 7
    missingok
    notifempty
    compress
    copytruncate
    dateext
}

4️⃣ 测试 logrotate 是否生效

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

强制立即执行:

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

三、Tomcat Access Log(访问日志)分割

1️⃣ 使用 Tomcat 自带 AccessLogValve(推荐)

编辑:

sudo nano /opt/tomcat/conf/server.xml

找到:

<Valve className="org.apache.catalina.valves.AccessLogValve"
       directory="logs"
       prefix="localhost_access_log"
       suffix=".txt"
       pattern="combined" />

改为:

<Valve className="org.apache.catalina.valves.AccessLogValve"
       directory="logs"
       prefix="localhost_access_log"
       suffix=".txt"
       pattern="combined"
       rotatable="true"
       fileDateFormat="yyyy-MM-dd" />

✅ Tomcat 会每天自动生成:

localhost_access_log.2026-01-21.txt

然后配合 logrotate 压缩即可。


四、不要做的事 ❌

❌ 直接删除 catalina.out(可能导致 Tomcat 无法写入)
❌ 用 echo > catalina.out(可能破坏文件 inode)
❌ 用 cron + kill -HUP(Tomcat 不是 Nginx)


五、常见问题

Q1:Tomcat 不重启,日志能切割吗?

可以,使用 copytruncate


Q2:logrotate 什么时候执行?

默认每天执行一次:

/etc/cron.daily/logrotate

Q3:Debian 10 / 11 / 12 有区别吗?

✅ 没有,方法通用


六、总结(最佳实践 ✅)

日志类型 推荐方式
catalina.out logrotate + copytruncate
业务日志 logrotate
access log Tomcat AccessLogValve
系统日志 不用管

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

  • Debian 版本
  • Tomcat 版本
  • Tomcat 安装路径

我可以帮你写一份完全适配你服务器的 logrotate 配置

0