温馨提示×

ubuntu tomcat日志为何过大

小樊
35
2026-08-31 11:23:49
栏目: 智能运维

Ubuntu 上 Tomcat 日志过大的原因通常不是单一问题,而是多个日志机制叠加 + 配置不当共同导致的。下面按常见原因 → 对应解决办法来说明,基本可以覆盖 90% 的场景 ✅


一、Tomcat 日志为什么会越来越大?

1️⃣ 日志种类多,默认不自动清理

Tomcat 在 logs/ 目录下通常会有:

catalina.out        ← 最大元凶(不轮转)
catalina.2026-01-21.log
localhost.log
manager.log
host-manager.log
access_log.*.txt

其中,catalina.out 是重点问题对象


2️⃣ catalina.out 不会自动切割(最常见原因)

  • catalina.out标准输出 / 标准错误
  • Tomcat 默认不会轮转
  • 程序只要一直往 stdout / stderr 打日志,它就会无限增长

✅ 常见于:

  • System.out.println()
  • 未配置日志框架
  • 应用异常频繁打印堆栈

3️⃣ 应用日志未规范使用日志框架

比如:

  • 直接使用 System.out.println
  • log4j / logback 配置不当
  • 日志级别设成 DEBUGALL

结果:

  • 日志同时写进 catalina.out + 应用日志文件
  • 双重放大

4️⃣ Access Log(访问日志)未限制

Tomcat 默认会生成:

localhost_access_log.2026-01-21.txt

如果:

  • 访问量大
  • 不限制字段
  • 不轮转

也会非常大


5️⃣ 日志轮转配置缺失或失效

Ubuntu 虽然有 logrotate,但:

  • Tomcat 默认 不参与 logrotate
  • logrotate 配置错误
  • 或 Tomcat 一直在写,rotate 后文件未释放

6️⃣ 磁盘空间未被释放(文件被占用)

常见现象:

  • 日志删了
  • df -h 仍然满

原因:

lsof | grep deleted

Tomcat 仍然持有已删除文件句柄


二、如何快速定位是哪个日志在吃空间?

cd /opt/tomcat/logs   # 或 /var/log/tomcat9
du -sh *

重点看:

  • catalina.out
  • access_log
  • 应用自己的日志

三、核心解决方案(强烈推荐)

✅ 方案一:禁用或重定向 catalina.out(最重要)

方法 1:直接关闭(推荐)

修改 bin/catalina.shsystemd 启动参数:

CATALINA_OUT=/dev/null

✅ 适用于:

  • 已有 log4j / logback
  • 不需要 stdout 日志

方法 2:使用 logrotate 切割 catalina.out

sudo nano /etc/logrotate.d/tomcat

示例:

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

✅ 方案二:应用日志规范化

✅ 不要使用:

System.out.println();

✅ 使用:

  • Logback
  • Log4j2

并控制级别:

<root level="INFO">

✅ 方案三:限制 Access Log

conf/server.xml

<Valve className="org.apache.catalina.valves.AccessLogValve"
       directory="logs"
       prefix="localhost_access_log"
       suffix=".txt"
       pattern="%h %l %u %t "%r" %s %b"
       maxDays="7" />

重点:

maxDays="7"

✅ 方案四:确认 logrotate 是否生效

logrotate -d /etc/logrotate.d/tomcat

✅ 方案五:被占用但未释放的日志

lsof | grep deleted

解决方式:

systemctl restart tomcat

四、推荐的生产环境配置(总结)

最佳实践

  • ❌ 不写 catalina.out
  • ✅ 使用 logback/log4j2
  • ✅ 日志级别 INFO
  • ✅ access log 保留 ≤ 7 天
  • ✅ 配置 logrotate
  • ✅ 定期监控磁盘

五、如果你愿意,我可以帮你:

  • ✅ 看你的 server.xml
  • ✅ 检查 catalina.sh
  • ✅ 分析某个具体日志文件
  • ✅ 给出 最小侵入式修复方案

你可以直接贴:

ls -lh /opt/tomcat/logs
cat conf/server.xml

0