一、功能概述

接口调用记录模块通过auth_interface_log(实时记录)和auth_interface_log_history(历史记录)表实现系统内部接口调用的全链路追踪,支持调用详情查询、统计分析、项目与接口筛选等功能。系统记录接口调用的关键信息(如请求参数、响应结果、耗时、状态等),并通过Redis缓存提升查询效率,同时提供缓存清理机制,满足接口监控、问题排查和性能分析需求。

二、核心功能说明

(一)接口调用记录分页查询

  1. 操作路径:系统管理 → 接口调用记录 → 列表查询
  2. 权限控制:需拥有auth:interface:log:page:list权限
  3. 查询逻辑
    • 通过level参数区分查询范围:
      • level=NEWEST_JOURNAL(最新日志):查询auth_interface_log
      • 其他值(历史日志):查询auth_interface_log_history
    • 支持跨表统一返回格式(通过KPJsonUtil将历史表数据转换为InterfaceLogPO
  4. 查询参数(通过InterfaceLogListParamPO传递):
    参数名关联字段说明
    projectNameproject_name项目名称,精确匹配
    uriuri请求路径,模糊匹配
    namename接口名称,精确匹配
    parametersparameters请求参数,模糊匹配
    resultresult响应结果,模糊匹配
    clinetIpclinet_ip客户端IP,精确匹配
    identificationidentification操作人/项目ID,精确匹配
    identificationNameidentification_name操作人姓名/项目名称,精确匹配
    phonephone操作人手机号,模糊匹配
    serialserial操作人工号,精确匹配
    statusstatus状态(200成功/500失败),精确匹配
    messagemessage响应信息,模糊匹配
    callTimecall_time调用日期,按天筛选(自动匹配当天起止时间)
  5. 分页与排序
    • 分页:通过pageNum(页码)和pageSize(每页条数)控制
    • 排序:支持按任意字段排序(通过orderBy参数指定,如call_time DESC
  6. 数据来源
    • 最新日志:从auth_interface_log表查询
    • 历史日志:从auth_interface_log_history表查询,并转换为InterfaceLogPO格式
  7. 返回字段:接口调用的完整信息,包括请求基本信息、参数、结果、耗时、状态等

(二)接口调用详情查询

  1. 操作路径:接口调用记录列表点击目标记录「详情」按钮
  2. 权限控制:需拥有auth:interface:log:details权限
  3. 查询参数:记录主键(uuid,必填,校验失败提示“请输入uuid”)
  4. 查询逻辑
    • 优先从auth_interface_log表查询实时记录
    • 若未查询到结果,可扩展支持从历史表查询(当前实现仅查实时表)
  5. 返回内容
    • 基础信息:项目名称、接口URL、请求方式、调用时间
    • 交互数据:入参(parameters)、出参(result
    • 性能数据:处理时间(dispose_time,毫秒)、时间说明(dispose_time_explain
    • 状态信息:请求状态(status)、错误信息(message,失败时显示)
    • 来源信息:客户端IP(clinet_ip)、来源平台(plat_form
    • 操作人信息:ID/姓名/工号/手机号

(三)项目与接口筛选功能

1. 项目列表查询(queryProject

  • 操作路径:接口调用记录页面选择「项目筛选」下拉框
  • 缓存机制
    • 缓存键:redisKeyByProject = AUTHENTICATION + "interface:log:project"
    • 缓存时长:2小时
    • 缓存更新:查询结果不存在时重建缓存
  • 查询逻辑
    1. 从缓存获取,命中则直接返回
    2. 未命中则从实时表(group by project_name)和历史表(同左)查询去重的项目名称
    3. 若查询结果为空,从ProjectCache获取所有项目名称补充
    4. 结果格式:DictionaryBO列表(label/value均为项目名称)
  • 应用场景:作为接口查询的前置筛选条件,快速定位目标项目的接口记录

2. 接口名称查询(queryInterfaceName

  • 操作路径:选择项目后加载该项目下的接口列表
  • 查询参数:项目名称(projectName,必填,校验失败提示“请输入项目名称!”)
  • 缓存机制
    • 缓存键:redisKeyByInterfaceName + projectName(每个项目独立缓存)
    • 缓存时长:2小时
  • 查询逻辑
    1. 从缓存获取,命中则直接返回
    2. 未命中则从实时表和历史表查询该项目下group by name的接口名称
    3. 结果格式:DictionaryBO列表(label/value均为接口名称)
  • 应用场景:配合项目筛选,精确查询特定接口的调用记录

(五)缓存清理(clearCache

  1. 操作路径:接口调用记录页面 → 清空缓存按钮
  2. 权限控制:需拥有auth:interface:log:clear:cache权限
  3. 清理范围
    • 项目列表缓存(redisKeyByProject
    • 所有接口名称缓存(redisKeyByInterfaceName前缀的所有键)
  4. 功能作用:解决缓存数据与数据库不一致问题,适用于数据更新后强制刷新缓存

三、核心数据表说明

(一)接口调用记录表(auth_interface_log

字段名类型说明索引
uuidvarchar(32)主键,唯一标识一条调用记录主键索引
project_namevarchar(128)项目名称,关联调用所属项目普通索引
urlvarchar(400)完整请求URL普通索引
urivarchar(400)请求URI(相对路径)-
namevarchar(128)接口名称/标识普通索引
methodvarchar(20)请求方式(GET/POST等)普通索引
parameterstext请求参数(JSON格式)-
resulttext响应结果(JSON格式)-
dispose_timebigint处理时间(毫秒)-
dispose_time_explainvarchar(128)时间说明(如“正常”“较慢”)-
clinet_ipvarchar(128)客户端IP地址普通索引
call_timedatetime接口调用时间普通索引
statusint请求状态(200成功/500失败)普通索引
messagevarchar(1000)状态描述(失败时为错误信息)-

(二)接口调用记录历史表(auth_interface_log_history

  • 与实时表的关系:结构完全一致,用于存储过期的日志数据
  • 数据迁移规则:通常按时间迁移(如超过7天的日志从实时表迁移至此表)
  • 作用:减轻实时表的数据量,提升查询性能

四、日志生命周期管理

  1. 日志生成:外部接口被调用时自动记录,实时写入auth_interface_log
  2. 数据迁移:通过定时任务(如每日凌晨)将auth_interface_log中超过7天的记录迁移至auth_interface_log_history
  3. 历史清理auth_interface_log_history中超过90天的记录可根据业务需求进行归档或删除
  4. 查询路由:通过level参数自动路由至实时表或历史表,保证查询便捷性

五、应用场景说明

  1. 问题排查:通过入参(parameters)、出参(result)和错误信息(message)定位接口调用失败原因
  2. 性能优化:分析dispose_time字段识别耗时较长的接口,针对性优化
  3. 安全审计:通过clinet_ipidentification追踪异常调用(如频繁请求、非法IP访问)
  4. 接口依赖分析:统计各项目的接口调用频率,梳理系统间的依赖关系
  5. 高频接口识别:通过queryInterfaceCallList发现调用次数最多的接口,重点保障其稳定性

六、性能优化说明

  1. 分表存储:实时表与历史表分离,减少单表数据量,提升查询效率
  2. 索引优化:对高频查询字段(project_namenamecall_timestatus)建立索引
  3. 缓存机制:热点数据(项目列表、接口名称、统计结果)缓存到Redis,减少数据库访问
  4. 分页查询:使用PageHelper实现物理分页,避免全量数据加载
  5. 聚合查询优化:统计接口调用次数时使用group by uriANY_VALUE函数,减少聚合计算耗时