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 "%r" %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 自身不会自动对日志进行轮转,不过可以借助以下几种方式实现:
- 操作系统工具:利用 cron 任务结合
logrotate工具来实现日志轮转。 - Apache Commons Daemon:配置
catalina.sh脚本,使用rotatelogs命令。 - 第三方日志框架:把 Tomcat 配置为使用 Log4j 或 Logback,这两个框架都具备日志轮转功能。
性能优化建议
- 控制日志级别:在生产环境中,建议将日志级别设置为
INFO或者更高,避免产生过多的调试信息。 - 合理配置访问日志:访问日志会对性能造成一定影响,可根据实际需求调整日志格式和记录频率。
- 使用异步日志:通过配置
AsyncFileHandler可以减少 I/O 操作对应用性能的影响。 - 定期清理日志:设置自动清理策略,防止日志文件占用过多磁盘空间。
常见问题排查
| 问题现象 | 可能原因 | 排查方法 |
|---|---|---|
| 应用无法启动 | 配置文件错误、内存不足、端口被占用 | 检查 catalina.out 和 localhost.log 中是否有异常堆栈信息 |
| 404 错误 | 应用部署失败、上下文路径配置错误 | 查看 localhost.log 中是否有应用初始化失败的信息 |
| 性能问题 | 线程池耗尽、数据库连接泄漏、垃圾回收频繁 | 分析 catalina.out 中的线程转储信息,结合 JMX 监控工具进行排查 |
| 安全漏洞 | 存在未授权访问、SQL 注入等安全风险 | 检查 access_log 中是否有异常请求,如包含恶意 SQL 语句或路径遍历的请求 |
通过深入了解 Tomcat 的日志系统,你可以更高效地监控应用状态、快速定位问题并优化系统性能。
浙公网安备 33010602011771号