温馨提示×

为何Tomcat日志过大

小樊
45
2026-07-13 09:01:16
栏目: 智能运维

Tomcat 日志过大的原因通常可以归结为 日志配置不合理、应用输出过多、日志未轮转 等几类。下面按常见原因 → 对应说明 → 解决建议来说明。


一、常见原因

1. 日志级别设置过低(最常见)

  • logging.propertieslog4j / logback 中日志级别设置为 DEBUGALL
  • 导致大量调试信息被记录

表现

  • catalina.out 或应用日志快速增长
  • 即使访问量不大,日志也很大

2. 应用大量打印日志(System.out / System.err)

  • 代码中大量使用:
    System.out.println(...)
    
  • 在 Tomcat 中,这些输出默认会进入 catalina.out

特点

  • 日志内容重复
  • 无日志级别控制
  • 难以关闭

3. catalina.out 没有日志轮转(非常常见)

  • Tomcat 默认不会对 catalina.out 做轮转
  • 长期运行后,文件会持续增长

结果

  • 单个文件几十 GB
  • 磁盘被占满

4. 访问日志未限制(access log)

  • server.xml 中启用了 AccessLogValve
  • 未限制保留时间或大小
<Valve className="org.apache.catalina.valves.AccessLogValve"
       directory="logs"
       prefix="localhost_access_log"
       suffix=".txt"
       pattern="%h %l %u %t "%r" %s %b" />

5. 异常频繁抛出

  • 应用存在循环异常
  • 每次异常打印完整堆栈

示例

  • 定时任务异常
  • 数据库连接失败
  • 空指针异常

6. 日志框架配置冲突

  • 同时引入:
    • log4j
    • logback
    • java.util.logging
  • 导致日志重复输出

二、Tomcat 常见日志文件说明

文件 说明
catalina.out 标准输出 + 标准错误(不会自动轮转)
catalina.2026-01-21.log Tomcat 自身日志
localhost.log 应用异常
manager.log 管理应用
host-manager.log 虚拟主机管理
localhost_access_log.txt 请求访问日志

三、解决方案(重点)

✅ 1. 调整日志级别

logging.properties

.level = INFO
org.apache.catalina.level = INFO

log4j / logback

<root level="INFO">

✅ 2. 禁止 System.out(强烈建议)

  • 改为使用日志框架
  • 或重定向 catalina.out

✅ 3. 对 catalina.out 做轮转(必须)

Linux 示例(logrotate)

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

✅ 4. 限制访问日志

  • 定期清理
  • 或设置日志策略

✅ 5. 修复异常问题

  • 查看异常堆栈
  • 避免重复抛异常

✅ 6. 排查日志重复

  • 检查 lib 目录
  • 避免多个日志框架共存

四、快速排查清单 ✅

  • [ ] 日志级别是否是 DEBUG?
  • [ ] 是否有 System.out.println?
  • [ ] catalina.out 是否轮转?
  • [ ] 是否有异常循环?
  • [ ] 访问日志是否无限增长?

五、一句话总结

Tomcat 日志过大的核心原因: 日志级别太低 + catalina.out 没轮转 + 应用乱打日志

如果你愿意,可以把:

  • Tomcat 版本
  • 使用的日志框架
  • 当前 logging.propertieslogback.xml

发出来,我可以帮你 精确优化配置

0