3.7 KiB
3.7 KiB
消费机“支付中”耗时诊断
食堂购买页面从发起“支付中”到请求关闭遮罩,为每次付款保存一条
|支付耗时| warning 摘要,其中 event:summary 表示本次付款汇总。
无需开启全量 INFO 日志,也不需要网关访问日志。安装包含本次改动的版本后才会产生这些记录。
现场取日志
- 正常使用消费机;出现等待时记下大概时间。
- 在消费机设置中导出当天日志,保留完整的付款前后记录。
- 按
trace聚合同一笔付款;摘要中出现androidOrderCode后,可用该号匹配 hard 模块订单 SQL。
诊断日志只增加关联编号、阶段、耗时、状态码和异常类型,不增加人员资料、令牌、付款码或图片内容。
付款阶段
| 字段 | 覆盖范围 |
|---|---|
discounts |
付款时重算优惠,包括优惠 HTTP、本地读取及计算 |
local_order_update |
本地订单、购物车更新 |
create_order |
下单整体,包括下面的准备、请求和收尾阶段 |
order_prepare |
本地配置、订单校验及读取 |
evidence_bind / evidence_version |
本地人脸证据任务绑定和版本读取 |
order_http |
下单 API 完整 Future 的等待 |
order_reconcile |
请求异常后的只读订单对账 |
local_payment_commit |
支付结果写回本地订单 |
evidence_ready / evidence_cancel |
本地证据任务状态更新 |
stagesInclusiveMs 的单位是毫秒。父阶段包含子阶段,不能直接相加。
totalMs 从开始付款追踪到调用关闭遮罩并结束追踪,不包含遮罩动画和最终帧绘制完成时间。
阶段等待满 1 秒会输出一次 event:pending;慢阶段结束输出 event:stage。
每笔付款结束均输出一条摘要,异常只记录类型。
eventLoopLagMs 是付款期间每 250ms 定时器的最大超期调度时间。
它很大时说明 Dart 事件循环未及时获得调度,可能是同步计算或进程/设备调度停顿;
它很小时不能证明 Android 主线程、GPU 或所有原生插件都正常。
HTTP 阶段
用户查询、优惠查询、下单及对账接口超过 1 秒,或返回失败时,额外输出
|支付请求耗时| warning,使用同一 trace(付款范围外的用户查询显示 -)。
| 字段 | 含义 |
|---|---|
settingsMs |
拦截器读取本地鉴权配置的耗时 |
prepareMs |
拦截器开始至交给 HTTP 适配器前的耗时,包含 settingsMs |
waitMs |
发出请求后至响应/错误拦截器进入,包含连接、传输、网关、服务、解码及 Dart 调度 |
handlerMs |
响应/错误拦截器内处理耗时,包括发生时的自动登录 |
totalMs |
从请求拦截器开始到统一响应处理结束 |
HTTP 摘要只记录路径,不记录查询参数、请求体、响应正文、令牌或完整 URL。
waitMs 不能解释为纯后端耗时,也不能独立拆开网络和服务端。
根据下一次日志判断
- 本地阶段数秒、HTTP 很快:优先排查本地数据库、证据任务及其排队。
- HTTP 等待数秒、
eventLoopLagMs很小:重点对齐同一订单的服务器记录,排查完整远程请求链路。 settingsMs或prepareMs数秒:检查消费机本地设置读取及发出前处理。handlerMs数秒:检查响应处理、登录恢复等收尾工作。eventLoopLagMs数秒:重点排查 Dart 同步阻塞和设备/进程调度,同时结合系统日志确认原因。
本次诊断不调整扣款、重试、超时、优惠计算或证据上传顺序。支付遮罩改为在 finally 中关闭,以覆盖优惠查询或本地准备步骤意外抛错的分支。