首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
数据库
›
Oracle
›
Tomcat 日记体系深度剖析:从访问日记设置到错误日记分 ...
返回列表
发新帖
Tomcat 日记体系深度剖析:从访问日记设置到错误日记分析的全链路指南
[复制链接]
发表于 2025-9-8 19:10:40
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
一、Tomcat 核心日记文件架构与核心
功能
1. 三大基础日记文件对比(权威定义)
追踪应用直接打印的调试信息[/td][/tr][tr][td]
catalina.log
[/td][td]org.apache.catalina包[/td][td]Tomcat 引擎内部事件日记(初始化、毗连器状态、类加载)[/td][td]分析引擎级异常(如 Jasper 编译错误)
监控
线程池 / 毗连器
性能
题目[/td][/tr][tr][td]
localhost.log
[/td][td]StandardContext组件[/td][td]应用初始化异常日记(Listener/Filter/Servlet 未处置惩罚异常)[/td][td]定位 Spring 上下文加载失败、
数据库
毗连池设置错误等导致的应用启动失败[/td][/tr][/table]
2. 日记流向底层原理
catalina.out
:由启动脚本catalina.sh自动创建,通过重定向绑定stdout/stderr,需手动设置切割(如logrotate)。
catalina.log/localhost.log
:由conf/logging.properties设置,基于AsyncFileHandler实现按天轮转,支持独立日记级别控制(如仅记录SEVERE/WARNING级日记)。
二、访问日记全字段设置:从基础到进阶的精致化记录
1. 核心设置模板(server.xml)
在<Host>节点中添加以下设置,覆盖客户端 IP、状态码、文件巨细、时间等
30 + 字段
(Tomcat 10.1 官方支持):
xml
<Host name="localhost" appBase="webapps">
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" <!--
日志
存储
目录 -->
prefix="access_log." <!-- 文件名前缀 -->
suffix=".log" <!-- 后缀 -->
pattern="%h %a %u %t "%r" %s %b %I %m %U %q %H %D %p %v" <!-- 核心业务字段组合 -->
requestTimeFormat="yyyy-MM-dd'T'HH:mm:ssXXX" <!-- ISO 8601标准时间格式 -->
resolveHosts="false" <!-- 关闭DNS解析(提升
性能
) -->
maxDays="30"/> <!-- 保留30天
日志
-->
</Host>
复制
代码
2. 全关键字段详解(业务价值 +
版本
支持)
(1)客户端与身份字段
变量寄义示例值业务价值
版本
支持%h客户端原始 IP192.168.1.100识别攻击来源 IP全
版本
%a真实 IP(署理透传)10.0.0.5多署理环境定位真实用户(需设置X-Forwarded-For)全版本%u认证用户admin追踪登任命户操作(需应用开启认证)全版本
(2)哀求与协议字段
变量寄义示例值业务价值版本支持%t标准时间2025-05-09T14:30:45+08:00时间序列分析(如接口访问高峰)8.5.69+/9.0.36+%r完备哀求行GET /api/user HTTP/1.1定位接口路径与协议全版本%H哀求协议HTTP/1.1统计 HTTP/2 迁移进度全版本
(3)
性能
与巨细字段
变量寄义示例值业务价值版本支持%s状态码200/500盘算接口乐成率 / 错误率全版本%b响应巨细(字节)1234(-表示无内容)统计下载流量(如文件下载接口)全版本%I哀求巨细(字节)567统计上传流量(需 Tomcat 9.0.71+)9.0.71+/10.1+%D处置惩罚时间(毫秒)45定位慢接口(如>500ms)全版本
(4)
服务器
与上下文字段
变量寄义示例值业务价值版本支持%UURL 路径(无参数)/api/user统计热门接口(按路径分组)全版本%q查询参数?page=1分析用户查询行为(如搜索关键词)全版本%v假造主机名localhost多假造主机流量区分全版本
3. 日记示例输出
log
192.168.1.100 10.0.0.5 admin 2025-05-09T14:30:45+08:00 "GET /api/user?page=1 HTTP/1.1" 200 1234 - GET /api/user ?page=1 HTTP/1.1 45 8080 localhost
复制
代码
三、错误日记深度分析:三级定位策略与实战案例
1. 三级日记定位法(从应用到引擎)
(1)
应用级异常(优先查localhost.log)
典范场景
:Spring 监听器初始化失败 log
SEVERE [main] org.apache.catalina.core.StandardContext.listenerStart
Error configuring application listener of class [com.example.ContextLoaderListener]
Caused by: java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoader
复制
代码
修复
:检查 Maven 依赖是否包含spring-web模块,确认 WAR 包完备性。
(2)
引擎级异常(查察catalina.log)
典范场景
:HTTP 毗连器端口占用 log
SEVERE [main] org.apache.catalina.core.StandardService.initInternal
Failed to initialize connector [Connector[HTTP/1.1-8080]]
Caused by: java.net.BindException: Address already in use: bind
复制代码
修复
:lsof -i:8080杀死占用进程,或修改server.xml端口为8081。
(3)
原始错误输出(catalina.out兜底)
典范场景
:未捕获的空指针异常 log
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context [] threw exception
java.lang.NullPointerException: Cannot invoke "String.length()" on a null object reference
at com.example.UserController.getUsername(UserController.java:45)
复制代码
2. 堆栈剖析三要素
异常范例
:区分RuntimeException(代码逻辑题目)与ServletException(框架题目)。
触发位置
:关注at com.example.XXX后的类名与行号(准确到代码文件第 X 行)。
依赖链路
:通过Caused by:追踪根本缘故原由(如
数据库
毗连失败导致的业务异常)。
3. 日记分析工具链
工具分类工具名称核心
功能
示例命令命令行工具grep关键词搜索(支持正则)`grep -E '500Exception' access_log*.log`awk布局化统计(按列提取数据)awk '{sum+=$6} END {print "总下载流量:", sum}' access_log.log可视化平台ELK Stack日记聚合、仪表盘
监控
Logstash 剖析grok模式:match => { "message" => "%{IP:client_ip} %{DATA:request}" }源码级调试IntelliJ IDEA断点追踪 Tomcat 组件初始化流程在StandardContext.startInternal()设置断点,追踪 Listener 加载顺序
四、生产环境最佳实践与避坑指南
1. 日记性能优化(logging.properties)
properties
# 仅记录WARNING及以上级别
日志
(减少冗余)
1catalina.org.apache.juli.AsyncFileHandler.level = WARNING
2localhost.org.apache.juli.AsyncFileHandler.level = SEVERE
# 控制日志保留周期(默认90天,建议30天)
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 30
复制代码
2. 署理环境真实 IP 设置
(1)Nginx 署理设置
nginx
proxy_set_header X-Forwarded-For $remote_addr; # 传递原始客户端IP
proxy_set_header X-Real-IP $remote_addr; # 兼容旧系统
proxy_set_header Host $http_host; # 传递虚拟主机名
复制代码
(2)Tomcat 日记设置
xml
pattern="%a %h %t "%r" %s %b" <!-- %a优先使用X-Forwarded-For获取真实IP -->
复制代码
3. 日记切割与
存储
catalina.out 切割
(使用logrotate): bash
/etc/logrotate.d/tomcat
{
daily
rotate 7
compress
create 640 tomcat tomcat
}
复制代码
避免日记爆炸
:禁用不必要字段(如%r完备哀求行),生产环境建议保留核心业务字段(%a/%s/%U/%b/%I)。
五、版本兼容性与权威验证
功能
特性8.5.x9.0.x10.1.x权威依据requestTimeFormat8.5.69+9.0.36+支持Tomcat 10.1 官方
文档
%I哀求体巨细变量不支持9.0.71+支持Tomcat 9.0.71 更新日记Jakarta EE
API
适配不支持部分支持全面支持Tomcat 10 + 官方迁移指南
六、总结:日记体系建设的黄金法则
分层计划
:
访问日记解决 “谁在何时访问了什么,传输多大数据”(如%a/%U/%b);
错误日记解决 “那边出错,为什么出错”(如localhost.log的初始化异常栈)。
版本对齐
:根据 Tomcat 版本选择支持的字段(如 9.0.71 + 使用%I记录哀求体巨细)。
闭环管理
:创建 “日记采集→异常定位→代码修复→
监控
预警” 全链路,通过 Grafana 及时监控 5xx 错误率。
安全
合规
:敏感日记脱敏(如隐藏哀求体密码),定期审计日记(符合等保三级要求)。
通过系统化的日记设置与分析,可实现从 “被动排错” 到 “主动优化” 的升级,为高并发 Web 应用提供坚实的监控保障。结合官方
文档
持续优化设置,确保日记体系始终匹配业务需求。
回复
使用道具
举报
返回列表
浏览过的版块
SQL-Server
网络安全
DevOps与敏捷开发
容器及微服务
数据仓库与分析
物联网
区块链
数据安全
向量数据库
罪恶克星
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表