数据
聚焦技术和人文,分享干货,共同成长。
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:
unpackWARs="true" autoDeploy="true"> prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
访问日志中常用的格式模式:
模式字符描述
%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 的日志系统,你可以更高效地监控应用状态、快速定位问题并优化系统性能。
posted on
2025-05-19 09:02
阿陶学长
阅读(410)
评论(0)
收藏
举报
刷新页面返回顶部