项目中的心跳任务和当前菜品 UUID/重量上传任务均约每 30 秒执行一次。原实现会持续记录正常心跳餐次和菜品重量上传成功结果,设备长期在前台运行时会产生大量重复的 local_log_ 文件内容,降低现场问题检索效率。
| 场景 | 本地记录 |
|---|---|
| 返回码为 0、数据存在、餐次为 1~3 | 不记录 |
| 设备编号为空 | 记录本地前置失败原因 |
| 请求结果为空 | 记录空结果原因 |
| 返回码非 0 | 记录返回码和接口/网络失败原因 |
| 返回码为 0 但数据为空 | 记录返回数据为空 |
| 餐次不在 1~3 | 记录异常餐次值 |
| 场景 | 本地记录 |
|---|---|
| 返回码为 0 | 不记录 |
| 设备编号为空 | 记录未发送请求及原因 |
| 餐台未排菜或菜品 UUID 为空 | 记录未发送请求及原因 |
| 当前重量或历史重量异常 | 记录具体重量状态原因 |
| 请求结果为空 | 记录菜品 UUID、重量和空结果原因 |
| 返回码非 0 | 记录菜品 UUID、重量、返回码和失败原因 |
心跳失败|code=500|reason=服务端异常 心跳失败|code=0|reason=餐次字段异常|currentMealTimes=4 菜品重量上传失败|dishUuid=xxx|weight=1250|code=-1|reason=网络连接超时
失败原因中的换行会转换为空格,字段分隔符 | 会转换为 /,避免服务端文本破坏单行日志结构。接口未提供失败原因时统一写为“服务端未返回失败原因”。
FrequentTaskFailureLogPolicy:纯 Java 失败判定与原因格式化,成功返回空结果表示不记录。HeartBeatWorker:移除正常餐次本地日志,补齐本地前置失败、响应失败、空数据和异常餐次日志。PushDishInfoAndWeightUtils:移除上传成功日志,保留并结构化所有前置失败,接口失败时写入返回码和消息。FrequentTaskFailureLogPolicyTest:覆盖成功静默、失败原因、空原因兜底、异常数据和原因单行化。ApiResultUtils,避免改变其他接口的日志和错误处理。local_log_YYYYMMDD.txt。testDebugUnitTest 全量通过。assembleDebug 构建通过。回滚仅需恢复 HeartBeatWorker 和 PushDishInfoAndWeightUtils 原有成功日志分支,并删除本次新增的失败日志规则及测试;不涉及数据库、接口或配置迁移。