一、功能概述
接口调用记录模块通过auth_interface_log
(实时记录)和auth_interface_log_history
(历史记录)表实现系统内部接口调用的全链路追踪,支持调用详情查询、统计分析、项目与接口筛选等功能。系统记录接口调用的关键信息(如请求参数、响应结果、耗时、状态等),并通过Redis缓存提升查询效率,同时提供缓存清理机制,满足接口监控、问题排查和性能分析需求。
二、核心功能说明
(一)接口调用记录分页查询
- 操作路径:系统管理 → 接口调用记录 → 列表查询
- 权限控制:需拥有
auth:interface:log:page:list
权限 - 查询逻辑:
- 通过
level
参数区分查询范围:level=NEWEST_JOURNAL
(最新日志):查询auth_interface_log
表- 其他值(历史日志):查询
auth_interface_log_history
表
- 支持跨表统一返回格式(通过
KPJsonUtil
将历史表数据转换为InterfaceLogPO
)
- 通过
- 查询参数(通过
InterfaceLogListParamPO
传递):参数名 关联字段 说明 projectName
project_name
项目名称,精确匹配 uri
uri
请求路径,模糊匹配 name
name
接口名称,精确匹配 parameters
parameters
请求参数,模糊匹配 result
result
响应结果,模糊匹配 clinetIp
clinet_ip
客户端IP,精确匹配 identification
identification
操作人/项目ID,精确匹配 identificationName
identification_name
操作人姓名/项目名称,精确匹配 phone
phone
操作人手机号,模糊匹配 serial
serial
操作人工号,精确匹配 status
status
状态(200成功/500失败),精确匹配 message
message
响应信息,模糊匹配 callTime
call_time
调用日期,按天筛选(自动匹配当天起止时间) - 分页与排序:
- 分页:通过
pageNum
(页码)和pageSize
(每页条数)控制 - 排序:支持按任意字段排序(通过
orderBy
参数指定,如call_time DESC
)
- 分页:通过
- 数据来源:
- 最新日志:从
auth_interface_log
表查询 - 历史日志:从
auth_interface_log_history
表查询,并转换为InterfaceLogPO
格式
- 最新日志:从
- 返回字段:接口调用的完整信息,包括请求基本信息、参数、结果、耗时、状态等
(二)接口调用详情查询
- 操作路径:接口调用记录列表点击目标记录「详情」按钮
- 权限控制:需拥有
auth:interface:log:details
权限 - 查询参数:记录主键(
uuid
,必填,校验失败提示“请输入uuid”) - 查询逻辑:
- 优先从
auth_interface_log
表查询实时记录 - 若未查询到结果,可扩展支持从历史表查询(当前实现仅查实时表)
- 优先从
- 返回内容:
- 基础信息:项目名称、接口URL、请求方式、调用时间
- 交互数据:入参(
parameters
)、出参(result
) - 性能数据:处理时间(
dispose_time
,毫秒)、时间说明(dispose_time_explain
) - 状态信息:请求状态(
status
)、错误信息(message
,失败时显示) - 来源信息:客户端IP(
clinet_ip
)、来源平台(plat_form
) - 操作人信息:ID/姓名/工号/手机号
(三)项目与接口筛选功能
1. 项目列表查询(queryProject
)
- 操作路径:接口调用记录页面选择「项目筛选」下拉框
- 缓存机制:
- 缓存键:
redisKeyByProject = AUTHENTICATION + "interface:log:project"
- 缓存时长:2小时
- 缓存更新:查询结果不存在时重建缓存
- 缓存键:
- 查询逻辑:
- 从缓存获取,命中则直接返回
- 未命中则从实时表(
group by project_name
)和历史表(同左)查询去重的项目名称 - 若查询结果为空,从
ProjectCache
获取所有项目名称补充 - 结果格式:
DictionaryBO
列表(label
/value
均为项目名称)
- 应用场景:作为接口查询的前置筛选条件,快速定位目标项目的接口记录
2. 接口名称查询(queryInterfaceName
)
- 操作路径:选择项目后加载该项目下的接口列表
- 查询参数:项目名称(
projectName
,必填,校验失败提示“请输入项目名称!”) - 缓存机制:
- 缓存键:
redisKeyByInterfaceName + projectName
(每个项目独立缓存) - 缓存时长:2小时
- 缓存键:
- 查询逻辑:
- 从缓存获取,命中则直接返回
- 未命中则从实时表和历史表查询该项目下
group by name
的接口名称 - 结果格式:
DictionaryBO
列表(label
/value
均为接口名称)
- 应用场景:配合项目筛选,精确查询特定接口的调用记录
(五)缓存清理(clearCache
)
- 操作路径:接口调用记录页面 → 清空缓存按钮
- 权限控制:需拥有
auth:interface:log:clear:cache
权限 - 清理范围:
- 项目列表缓存(
redisKeyByProject
) - 所有接口名称缓存(
redisKeyByInterfaceName
前缀的所有键)
- 项目列表缓存(
- 功能作用:解决缓存数据与数据库不一致问题,适用于数据更新后强制刷新缓存
三、核心数据表说明
(一)接口调用记录表(auth_interface_log
)
字段名 | 类型 | 说明 | 索引 |
---|---|---|---|
uuid | varchar(32) | 主键,唯一标识一条调用记录 | 主键索引 |
project_name | varchar(128) | 项目名称,关联调用所属项目 | 普通索引 |
url | varchar(400) | 完整请求URL | 普通索引 |
uri | varchar(400) | 请求URI(相对路径) | - |
name | varchar(128) | 接口名称/标识 | 普通索引 |
method | varchar(20) | 请求方式(GET/POST等) | 普通索引 |
parameters | text | 请求参数(JSON格式) | - |
result | text | 响应结果(JSON格式) | - |
dispose_time | bigint | 处理时间(毫秒) | - |
dispose_time_explain | varchar(128) | 时间说明(如“正常”“较慢”) | - |
clinet_ip | varchar(128) | 客户端IP地址 | 普通索引 |
call_time | datetime | 接口调用时间 | 普通索引 |
status | int | 请求状态(200成功/500失败) | 普通索引 |
message | varchar(1000) | 状态描述(失败时为错误信息) | - |
(二)接口调用记录历史表(auth_interface_log_history
)
- 与实时表的关系:结构完全一致,用于存储过期的日志数据
- 数据迁移规则:通常按时间迁移(如超过7天的日志从实时表迁移至此表)
- 作用:减轻实时表的数据量,提升查询性能
四、日志生命周期管理
- 日志生成:外部接口被调用时自动记录,实时写入
auth_interface_log
- 数据迁移:通过定时任务(如每日凌晨)将
auth_interface_log
中超过7天的记录迁移至auth_interface_log_history
- 历史清理:
auth_interface_log_history
中超过90天的记录可根据业务需求进行归档或删除 - 查询路由:通过
level
参数自动路由至实时表或历史表,保证查询便捷性
五、应用场景说明
- 问题排查:通过入参(
parameters
)、出参(result
)和错误信息(message
)定位接口调用失败原因 - 性能优化:分析
dispose_time
字段识别耗时较长的接口,针对性优化 - 安全审计:通过
clinet_ip
和identification
追踪异常调用(如频繁请求、非法IP访问) - 接口依赖分析:统计各项目的接口调用频率,梳理系统间的依赖关系
- 高频接口识别:通过
queryInterfaceCallList
发现调用次数最多的接口,重点保障其稳定性
六、性能优化说明
- 分表存储:实时表与历史表分离,减少单表数据量,提升查询效率
- 索引优化:对高频查询字段(
project_name
、name
、call_time
、status
)建立索引 - 缓存机制:热点数据(项目列表、接口名称、统计结果)缓存到Redis,减少数据库访问
- 分页查询:使用
PageHelper
实现物理分页,避免全量数据加载 - 聚合查询优化:统计接口调用次数时使用
group by uri
和ANY_VALUE
函数,减少聚合计算耗时