Files
ccdi/docs/reports/implementation/2026-07-20-external-api-log-implementation.md

44 lines
3.9 KiB
Markdown
Raw Normal View History

2026-07-20 15:35:54 +08:00
# 业务外部接口日志实施记录
## 修改内容
- 新增`sys_api_log`表及“日志管理 > 接口日志”菜单增量SQL。
- 新增接口日志持久化、列表查询、详情查询及对应权限控制。
- 将流水分析和征信解析调用统一接入完整请求响应日志。
- 新增显式调用用户快照,并贯穿项目创建、征信解析、批量上传和拉取本行信息异步链路。
- 流水分析和征信解析测试控制器取消匿名访问,改为校验`ccdi:project:edit`并记录当前登录用户。
- 新增接口日志前端列表、筛选和完整详情页面。
- 接口日志详情支持JSON无损结构美化、2空格缩进展示和长文本自动换行超大整数不经过JavaScript数值再序列化非JSON内容保持原文。
## 影响范围
- `ruoyi-system`接口日志实体、DTO/VO、Mapper和事务Service。
- `ruoyi-admin`:接口日志监控接口。
- `ccdi-lsfx`调用用户上下文、HTTP原始响应处理与日志写入。
- `ccdi-project``ccdi-info-collection`:调用用户显式透传。
- `ruoyi-ui`接口日志菜单页面和API封装。
- `sql/migration`:表结构与菜单权限增量脚本。
## 验证记录
- JDK 21主工程编译及`ruoyi-admin`全模块跳过测试打包:已通过。
- `ccdi-lsfx`定向测试20个测试全部通过覆盖7类HTTP调用、成功原始正文、非2xx、网络异常、空响应、反序列化失败、请求快照失败、multipart文件元数据、日志入库失败、调用用户必填及`NULL/system`系统调用人。
- `ccdi-project`定向测试57个既有回归测试全部通过新增异步调用人隔离用例后`CcdiFileUploadServiceImplTest`共33个测试全部通过验证清理`SecurityContext`后用户A、用户B连续任务不串号。
- `ccdi-info-collection`征信调用人透传测试5个测试全部通过。
- 前端生产构建:通过`.nvmrc`切换Node 14.21.3后执行`npm run build:prod`成功,仅保留项目既有资源体积告警。
- 数据库迁移:使用`bin/mysql_utf8_exec.sh`连续执行两次均成功;`sys_api_log`表排序规则为`utf8mb4_general_ci``caller_username`无默认值,`api_url``TEXT`,请求参数和响应正文为`LONGTEXT`;菜单与查询按钮均保持单条。
- 真实接口日志本地Mock下生成6条真实调用日志覆盖Token、multipart上传、征信URL-encoded发起及结果轮询日志调用人为`admin`、用户ID为1multipart仅保存文件名、10423字节大小和媒体类型详情保留完整原始响应。
- 权限验证:未登录请求`/monitor/apilog/list`返回业务码401管理员列表与详情接口返回正常。
- Browser use真实页面验收应用内浏览器从“系统管理 > 日志管理 > 接口日志”进入成功;列表显示调用账号,按`xfeature`筛选从6条收敛为2条详情完整展示用户、URL、请求响应头、请求参数、原始正文、HTTP状态及耗时长文本滚动区域无溢出。
- 详情格式化验收可解析JSON按层级换行缩进展示`9223372036854775807`等超大整数保持原值长字段在内容区域内自动折行异常堆栈等非JSON文本保留原始换行。
- 测试清理Browser use验收完成后删除本轮生成的6条接口日志测试数据并关闭后端、前端和Mock测试进程。
## 说明
- 认证字段按已确认需求原文保存,接口日志访问权限必须严格控制。
- `call_status`表示HTTP传输与响应反序列化状态页面统一标注为“HTTP调用状态”不表示外部系统业务码结果。
- multipart日志仅保存文件元数据不保存文件字节。
- 失败日志的异常字段保存完整异常堆栈,不只保存异常消息。
- 日志入库异常不会改变外部接口调用结果。
- 临时测试数据、临时测试文件和浏览器验收产物不纳入Git提交范围既有回归测试因公共方法签名变化产生的适配随业务代码一并交付。