PR REVIEW EVIDENCE

feat(api-log): 接口访问日志记录响应字节数

hemo-backend #1389

  1. PR 提交时间2026-10-10 21:49:36
  2. 审核结束时间2026-10-10 22:22:54
  3. 固定版本92c7ca157ac0
  4. 模型链gpt-5.6-terra
  5. 门禁blocked
  6. 结果success

难度分

31
  • code_volume24改动集中在一个响应包装器、日志落库字段和对应测试,代码规模较小。
  • architecture_complexity31涉及 Servlet 响应输出、异步请求排除、Redis 缓冲日志和批量数据库写入的衔接。
  • domain_knowledge28需要理解 Servlet writer 生命周期、字符编码状态和访问日志数据语义。
  • impact_scope39改动覆盖所有经过接口访问日志过滤器的请求,但不改变透析诊疗业务处理。
  • risk_level36主要风险在日志统计准确性和发布时的日志落库兼容性,未直接影响患者诊疗数据。

完成分

98
  • correctness95最终风险固定扣分:low 1×5;合计 -5
  • completeness100本次静态审核未发现该维度的确认问题;不代表绝对完善
  • code_quality100本次静态审核未发现该维度的确认问题;不代表绝对完善
  • security100本次静态审核未发现该维度的确认问题;不代表绝对完善
  • details100本次静态审核未发现该维度的确认问题;不代表绝对完善

固定范围

目标分支 SHA
910268048ae9cc79789cd652a40c4fc5f3117e5b
共同祖先 SHA
910268048ae9cc79789cd652a40c4fc5f3117e5b
PR head SHA
92c7ca157ac01becdbc65266251cfeceb2ad4894
轻量检查
passed · 轻量检查通过

风险与证据

low · 已确认 · 已计入完成分

字符流在关闭时产生的收尾字节未计入响应大小

少数包含未配对代理项的接口响应会被记录为比实际响应更小的流量,导致接口公网流量统计不准确。

证据:src/main/java/com/data/hemodialysis/configer/filter/ByteCountingResponseWrapper.java:147 do { result = encoder.encode(in, scratch, false); byteCount += scratch.position(); scratch.clear(); } while (result.isOverflow()); // 末尾未配对的高位代理留到下次写入 pending = in.slice();

建议:在 flush/close 路径中以结束输入模式完成编码并刷新编码器,将缓冲的代理项替换字节和其他收尾字节计入计数;补充仅写入未配对代理项后关闭 writer 的测试。