新增业务外部接口日志管理
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
# 业务外部接口日志后端实施计划
|
||||
|
||||
## 目标
|
||||
|
||||
在不改变业务外部接口调用结果的前提下,统一记录流水分析与征信解析请求的发起用户、完整请求、原始响应、HTTP状态、耗时和异常,并提供接口日志分页查询与详情接口。
|
||||
|
||||
## 实施内容
|
||||
|
||||
1. 新建`sys_api_log`,请求头、请求参数、响应头、响应正文和异常使用`LONGTEXT`,表和字符字段统一使用`utf8mb4_general_ci`。
|
||||
2. 在`ruoyi-system`新增独立Entity、查询DTO、列表VO、详情VO、Mapper和事务Service;列表SQL不读取大字段,详情按日志ID读取完整内容。
|
||||
3. 在`ruoyi-admin`新增`/monitor/apilog/list`与`/monitor/apilog/{logId}`,分别校验`monitor:apilog:list`和`monitor:apilog:query`权限。
|
||||
4. 在`ccdi-lsfx`新增不可变`CallerContext`,替换流水分析、征信解析和`HttpUtil`原有调用签名,所有调用方必须显式传入发起人。
|
||||
5. 批量上传与拉取本行信息在提交异步任务前生成调用用户快照,并贯穿上传、拉取、轮询、状态查询和流水分页查询全链路。
|
||||
6. `HttpUtil`统一获取原始响应文本后再反序列化;非2xx保存状态、响应头和错误正文,网络异常和解析异常同样保存失败日志。
|
||||
7. 认证字段按原文保存;multipart文件仅保存文件名、大小和媒体类型,不读取或保存文件内容。
|
||||
8. 日志写入使用`REQUIRES_NEW`事务;日志序列化或入库失败只记录应用错误,不覆盖原业务结果。
|
||||
9. 通过增量SQL幂等创建表、接口日志菜单和查询权限按钮,不自动写入`sys_role_menu`。
|
||||
10. 流水分析和征信解析测试控制器取消匿名访问,统一校验`ccdi:project:edit`,人工测试调用按当前登录用户记录,不再记为`system`。
|
||||
|
||||
## 验证标准
|
||||
|
||||
- JDK 21下后端主工程编译通过。
|
||||
- 全部`HttpUtil`调用类型均能保存成功或失败日志,原始响应字段不因DTO反序列化丢失。
|
||||
- 异步任务在线程安全上下文清理后仍保存最初发起用户,不同用户连续任务不串号。
|
||||
- 未授权用户不能访问接口日志列表和详情。
|
||||
- 日志入库失败不影响外部接口返回或原始业务异常。
|
||||
@@ -0,0 +1,23 @@
|
||||
# 业务外部接口日志前端实施计划
|
||||
|
||||
## 目标
|
||||
|
||||
在“系统管理 > 日志管理”下新增“接口日志”页面,以紧凑列表和独立详情展示业务外部接口调用情况及完整请求响应。
|
||||
|
||||
## 实施内容
|
||||
|
||||
1. 新增`src/api/monitor/apilog.js`,封装分页列表和详情接口。
|
||||
2. 新增`src/views/monitor/apilog/index.vue`,支持接口地址、HTTP方法、HTTP调用状态和调用时间筛选。
|
||||
3. 列表展示日志编号、调用账号、接口地址、HTTP方法、HTTP状态、HTTP调用状态、耗时和调用时间。
|
||||
4. 详情按需二次加载,展示调用账号和用户ID、URL、Content-Type、请求头、请求参数、响应头、原始返回正文和异常。
|
||||
5. 请求响应长文本使用等宽字体和固定最大高度;可解析的JSON基于原始字符串进行无损结构美化并按2空格缩进展示,不将数值反序列化后再输出,普通文本保留原始换行,长字段按容器自动折行;使用文本插值,禁止`v-html`。
|
||||
6. 页面只提供查询和详情,不增加删除、清空或导出操作。
|
||||
7. 详情弹窗使用响应式宽度和桌面最大宽度,长URL和长文本不得撑破页面。
|
||||
|
||||
## 验证标准
|
||||
|
||||
- 使用项目`.nvmrc`切换Node版本后,生产构建通过。
|
||||
- 管理员可从真实系统菜单进入接口日志页,列表、筛选、分页和详情正常。
|
||||
- 成功、失败、空响应和超长响应均能稳定展示,JSON缩进、超大整数原值、中文、原始换行和长字段自动折行正确。
|
||||
- 外部响应中的HTML只作为文本显示,不产生脚本或页面节点。
|
||||
- 未授权用户看不到详情入口且直接请求详情接口被拒绝。
|
||||
@@ -0,0 +1,43 @@
|
||||
# 业务外部接口日志实施记录
|
||||
|
||||
## 修改内容
|
||||
|
||||
- 新增`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为1,multipart仅保存文件名、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提交范围;既有回归测试因公共方法签名变化产生的适配随业务代码一并交付。
|
||||
Reference in New Issue
Block a user