网络请求本地日志变更记录
- 日期:2026-09-24
- 项目:AIDishRecognition
- 参考项目:CusumptionMachine
- 最终状态:
DONE_WITH_CONCERNS - 状态说明:新增网络请求日志本地持久化,单元测试、全量测试、Debug 构建和静态检查通过;未安装 APK 或触发真机请求,因此设备上的实际日志文件仍待人工验收。
变更目标
参照 CusumptionMachine 的网络请求日志记录方式,将 AIDishRecognition 现有 RequetInterceptor 组装的请求日志写入 LocalFileRecorder。日志目录不引入新路径,继续使用当前项目既有的应用文件目录下 Log/:优先外部应用文件目录,无法获取时回退内部应用文件目录。
实现摘要
RequetInterceptor在请求成功后,将 URL、现有 POST 参数、响应预览和耗时作为一条完整记录写入LocalFileRecorder。- 请求抛出
IOException时,记录 URL、异常类型、异常消息和耗时,再原样抛出同一个异常,保持原网络错误处理链不变。 - 响应预览继续使用
peekBody,最大预览长度集中为命名常量MAX_RESPONSE_PREVIEW_BYTES,不消耗业务层响应体。 - 新增资源
local_recorder_net_work_title=网络请求_。生成文件形如Log/网络请求_<日期>.txt,日期和追加写入格式均复用现有LocalFileRecorder。 - 增加
NetworkLogWriter注入边界,仅用于隔离本地 JVM 测试与 Android 日志/文件系统;生产无参构造仍直接连接LogUtils和LocalFileRecorder。
业务仓变更文件
app/src/main/java/com/cpt/aidishrecognition/network/RequetInterceptor.javaapp/src/main/res/values/strings.xmlapp/src/test/java/com/cpt/aidishrecognition/network/RequetInterceptorTest.java
strings.xml 在本任务开始前已有菜品学习相关改动;本次只新增网络日志文件名前缀,既有改动原样保留。业务仓其余未提交改动也未被本任务修改或清理。
测试与验证
TDD 过程
- 首次运行新增测试时,由于测试所需注入构造器尚未实现,编译失败,验证了红灯状态。
- 实现后首次 JVM 运行暴露
android.util.Log不可用;通过调试输出注入边界隔离 Android 运行时。 - 成功用例最初使用
FormBody,暴露 Androidorg.json在本地 JVM 中不可用;测试改用 GET 聚焦本次新增的持久化与响应体不被消耗行为,现有 Form/Multipart 格式化逻辑保持不变。
最终自动化验证
./gradlew :app:testDebugUnitTest --tests com.cpt.aidishrecognition.network.RequetInterceptorTest:退出码 0,BUILD SUCCESSFUL in 1s;新增 2 个用例通过。./gradlew :app:testDebugUnitTest:退出码 0,BUILD SUCCESSFUL in 706ms;28 个测试套件、118 个测试,0 failures、0 errors、0 skipped。./gradlew :app:assembleDebug:退出码 0,BUILD SUCCESSFUL in 591ms;生成约 82 MiB 的app/build/outputs/apk/debug/app-debug.apk。git diff --check:退出码 0,无输出。- 业务仓根目录未新增
docs/、doc/、prompt/或output/文档目录。
真机验收状态
adb devices 检测到一台状态为 device 的目标,但本任务未安装 APK、启动应用或触发真实网络请求。以下项目仍待人工执行,不能记为已通过:
- 发起成功请求后,确认应用文件目录的
Log/网络请求_<日期>.txt已追加 URL、响应和耗时。 - 制造网络失败后,确认同一日志文件追加异常类型、异常消息和耗时,且应用仍按原流程处理网络错误。
- 连续读取正常响应,确认业务层没有因日志记录出现空响应体。
配套文档
docs/superpowers/specs/2026-09-24-network-request-local-log-design.md/.htmldocs/superpowers/plans/2026-09-24-network-request-local-log.md/.html
以上路径均位于提示词工程 work_android/AIDishRecognition/,不在业务代码仓中。
Git 操作
未执行 stage、commit、push、branch、merge、rebase、reset 或 clean。