tomcat 日志详解

tomcat 日志详解
 
Tomcat 作为广泛使用的 Java Web 服务器,其日志系统对于应用监控、故障排查和性能优化起着至关重要的作用。下面详细介绍 Tomcat 日志的相关内容。

日志文件分类

Tomcat 的日志文件主要存放在 $CATALINA_BASE/logs 目录下,常见的日志文件有以下几种:

日志文件描述
catalina.out 包含 Tomcat 启动、停止信息以及应用程序输出到 System.out 和 System.err 的内容
catalina.YYYY-MM-DD.log 标准的 Catalina 引擎日志,记录服务器的生命周期事件
localhost.YYYY-MM-DD.log 应用程序上下文初始化和销毁的详细信息,如 Servlet 初始化错误
host-manager.YYYY-MM-DD.log 主机管理器应用的日志
manager.YYYY-MM-DD.log 应用管理器的日志
access_log.YYYY-MM-DD.txt 访问日志,记录所有 HTTP 请求的详细信息(需单独配置)

日志配置文件

Tomcat 的日志配置主要通过 $CATALINA_BASE/conf/logging.properties 文件进行,下面是该文件的核心配置项:
 
# 配置根日志记录器,指定使用的处理器
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler

# 配置 Catalina 引擎日志
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.

# 配置 localhost 日志
2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.

# 配置控制台输出
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
 

访问日志配置

若要启用访问日志,需要在 $CATALINA_BASE/conf/server.xml 中配置 Valve
 
<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="true">
      
    <!-- 访问日志配置 -->
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log" suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
           
</Host>
 

访问日志中常用的格式模式:
模式字符描述
%h 客户端 IP 地址
%l RFC 1413 身份信息
%u 认证的用户
%t 请求时间
%r 请求的第一行
%s HTTP 状态码
%b 响应字节数
%{xxx}i 请求头中的 xxx 字段值
%{xxx}o 响应头中的 xxx 字段值

日志级别

Tomcat 使用 Java 标准的日志级别,这些级别从低到高依次为:

  • SEVERE:严重错误,通常会导致应用程序无法继续运行。
  • WARNING:警告信息,表明可能存在潜在问题。
  • INFO:一般信息,用于记录应用程序的正常运行状态。
  • CONFIG:配置信息,记录配置相关的内容。
  • FINE:细粒度信息,用于调试目的。
  • FINER:更细粒度的信息。
  • FINEST:最细粒度的信息。

可以通过修改 logging.properties 中的 level 属性来调整日志级别,例如:

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler
 

日志轮转

Tomcat 自身不会自动对日志进行轮转,不过可以借助以下几种方式实现:

  1. 操作系统工具:利用 cron 任务结合 logrotate 工具来实现日志轮转。
  2. Apache Commons Daemon:配置 catalina.sh 脚本,使用 rotatelogs 命令。
  3. 第三方日志框架:把 Tomcat 配置为使用 Log4j 或 Logback,这两个框架都具备日志轮转功能。

性能优化建议

  • 控制日志级别:在生产环境中,建议将日志级别设置为 INFO 或者更高,避免产生过多的调试信息。
  • 合理配置访问日志:访问日志会对性能造成一定影响,可根据实际需求调整日志格式和记录频率。
  • 使用异步日志:通过配置 AsyncFileHandler 可以减少 I/O 操作对应用性能的影响。
  • 定期清理日志:设置自动清理策略,防止日志文件占用过多磁盘空间。

常见问题排查

问题现象可能原因排查方法
应用无法启动 配置文件错误、内存不足、端口被占用 检查 catalina.out 和 localhost.log 中是否有异常堆栈信息
404 错误 应用部署失败、上下文路径配置错误 查看 localhost.log 中是否有应用初始化失败的信息
性能问题 线程池耗尽、数据库连接泄漏、垃圾回收频繁 分析 catalina.out 中的线程转储信息,结合 JMX 监控工具进行排查
安全漏洞 存在未授权访问、SQL 注入等安全风险 检查 access_log 中是否有异常请求,如包含恶意 SQL 语句或路径遍历的请求

通过深入了解 Tomcat 的日志系统,你可以更高效地监控应用状态、快速定位问题并优化系统性能。

posted on 2025-05-19 09:02  阿陶学长  阅读(513)  评论(0)    收藏  举报