高频本地日志精简实施方案

背景

项目中的心跳任务和当前菜品 UUID/重量上传任务均约每 30 秒执行一次。原实现会持续记录正常心跳餐次和菜品重量上传成功结果,设备长期在前台运行时会产生大量重复的 local_log_ 文件内容,降低现场问题检索效率。

目标

日志保留矩阵

心跳

场景本地记录
返回码为 0、数据存在、餐次为 1~3不记录
设备编号为空记录本地前置失败原因
请求结果为空记录空结果原因
返回码非 0记录返回码和接口/网络失败原因
返回码为 0 但数据为空记录返回数据为空
餐次不在 1~3记录异常餐次值

菜品 UUID/重量上传

场景本地记录
返回码为 0不记录
设备编号为空记录未发送请求及原因
餐台未排菜或菜品 UUID 为空记录未发送请求及原因
当前重量或历史重量异常记录具体重量状态原因
请求结果为空记录菜品 UUID、重量和空结果原因
返回码非 0记录菜品 UUID、重量、返回码和失败原因

日志格式

心跳失败|code=500|reason=服务端异常
心跳失败|code=0|reason=餐次字段异常|currentMealTimes=4
菜品重量上传失败|dishUuid=xxx|weight=1250|code=-1|reason=网络连接超时

失败原因中的换行会转换为空格,字段分隔符 | 会转换为 /,避免服务端文本破坏单行日志结构。接口未提供失败原因时统一写为“服务端未返回失败原因”。

实现落点

  1. FrequentTaskFailureLogPolicy:纯 Java 失败判定与原因格式化,成功返回空结果表示不记录。
  2. HeartBeatWorker:移除正常餐次本地日志,补齐本地前置失败、响应失败、空数据和异常餐次日志。
  3. PushDishInfoAndWeightUtils:移除上传成功日志,保留并结构化所有前置失败,接口失败时写入返回码和消息。
  4. FrequentTaskFailureLogPolicyTest:覆盖成功静默、失败原因、空原因兜底、异常数据和原因单行化。

设计边界

验收

回滚

回滚仅需恢复 HeartBeatWorkerPushDishInfoAndWeightUtils 原有成功日志分支,并删除本次新增的失败日志规则及测试;不涉及数据库、接口或配置迁移。