You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提升Tomcat 9.0日志详细度以排查启动延迟问题

优化Tomcat 9.0启动日志与SQL查询记录的方案

一、细化Tomcat日志配置(突破ALL级别的局限)

你之前把logging.properties里的日志级别设为ALL但没得到足够细节,大概率是Handler级别未同步调整,或者没针对关键组件单独配置日志:

  1. 同步调整Handler的日志级别
    打开C:\Program Files\Apache Software Foundation\Tomcat 9.0\conf\logging.properties,确保输出Handler的级别也设为ALL,避免记录器的日志被Handler过滤:

    # 确保所有Handler的级别都是ALL
    1catalina.org.apache.juli.FileHandler.level = ALL
    java.util.logging.ConsoleHandler.level = ALL
    localhost.org.apache.juli.FileHandler.level = ALL
    manager.org.apache.juli.FileHandler.level = ALL
    host-manager.org.apache.juli.FileHandler.level = ALL
    
  2. 针对Tomcat部署核心组件单独开ALL级别
    添加以下配置,精准捕获部署阶段的所有细节:

    # Tomcat启动与部署核心日志
    org.apache.catalina.level = ALL
    org.apache.catalina.startup.level = ALL
    org.apache.tomcat.util.level = ALL
    # 若应用用了JSP/Jasper,也加上
    org.apache.jasper.level = ALL
    
  3. 应用框架日志补充
    如果你的应用基于Spring、JSF等框架,还要单独配置框架的日志级别,比如:

    # Spring相关日志
    org.springframework.level = ALL
    # JSF相关日志
    com.sun.faces.level = ALL
    

二、捕获启动时的所有SQL查询

根据你使用的持久化技术,选择对应的配置方式:

1. JDBC直连场景

在数据库连接URL中添加日志参数:

  • MySQL:
    jdbc:mysql://your-host/your-db?logger=com.mysql.cj.log.Slf4JLogger&profileSQL=true&logSlowQueries=true
    
  • PostgreSQL:
    jdbc:postgresql://your-host/your-db?logLevel=debug&loggerLevel=debug&logSql=true
    

2. ORM框架场景

Hibernate

在你的application.properties或persistence.xml中添加:

# 打印SQL语句
hibernate.show_sql=true
# 格式化SQL方便阅读
hibernate.format_sql=true
# 显示SQL注释(关联实体、操作类型)
hibernate.use_sql_comments=true
# 开启Hibernate SQL参数绑定日志
org.hibernate.SQL.level = ALL
org.hibernate.type.descriptor.sql.BasicBinder.level = ALL

MyBatis

在mybatis-config.xml中配置日志实现,并调整日志级别:

<settings>
  <!-- 使用SLF4J作为日志实现,和Tomcat日志体系兼容 -->
  <setting name="logImpl" value="SLF4J"/>
</settings>

然后在logging.properties中添加:

org.apache.ibatis.level = ALL

3. 连接池日志

如果用了HikariCP、Druid等连接池,开启连接池的详细日志:

  • HikariCP:
    com.zaxxer.hikari.level = ALL
    
  • Druid:
    com.alibaba.druid.level = ALL
    

三、额外的启动瓶颈定位手段

如果日志还是不足以找到问题,用JVM工具直接分析:

  1. 飞行记录器(JFR)
    启动Tomcat时添加以下JVM参数,记录启动过程的所有细节:

    -XX:StartFlightRecording=filename=tomcat_startup.jfr,duration=5m -XX:FlightRecorderOptions=settings=profile
    

    启动完成后,用JDK自带的JDK Mission Control打开tomcat_startup.jfr,可以直观看到耗时的方法调用、线程阻塞点。

  2. 线程栈快照
    在启动延迟的3分钟内,多次执行jstack <Tomcat进程ID>,对比不同时间点的线程状态,定位阻塞的线程(比如数据库连接等待、锁竞争)。

内容的提问来源于stack exchange,提问作者gmn_1450

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 02:52:52