Files
Neo-ZQYY/docs/audit/changes/2026-03-22__dev-trace-log-fullstack-feature.md
Neo 14a12342b5 chore(audit): 补追 96 份未入仓审计孤本 — 覆盖 2026-02-26 ~ 2026-04-08
这些审计记录原本堆积在 docs/audit/changes/changes/ 嵌套误产物目录下(由开发机迁移
79d3c2e 前后的不明批量操作产生)。由于同期 .gitignore 屏蔽了 docs/audit/ 全目录,
它们从未入过 git 任何分支 history。删除即永久丢失。

按 docs/specs/audit-gap-recovery/tasks.md 阶段 1 执行,将全部 96 份 D 类孤本
(主目录无同名、git history 亦无记录)复制到 docs/audit/changes/ 主目录入仓。

涵盖主题: P1-P18 全栈集成 / 多模块累积变更 / ETL bug 修复 / 业务日切 /
   召回与任务引擎改造 / 租户管理与审批 / 董事会财务 / 客户与助教详情 /
   DDL 基线合并 / Kiro 到 Claude Code 迁移

阶段 2(B 类内容漂移 1 份)和阶段 4(嵌套目录删除)独立推进。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 06:35:42 +08:00

10 KiB
Raw Blame History

变更审计记录dev-trace-log 全栈开发调试全链路日志系统

字段
日期 2026-03-22 21:03:24
Prompt-ID P20260322-205347
Session-ID 93568fb4
Session 路径 docs/audit/session_logs/2026-03/22/66_5460a155_203419

操作摘要

执行 .kiro/specs/dev-trace-log/ 全部 25 个任务实现开发调试全链路日志系统dev-trace-log。这是一个全栈 feature覆盖

  • 后端 trace 采集层HTTP 请求ASGI 中间件、SSE 流式响应、WebSocket 连接、后台 Job 执行
  • JSON Lines 日志写入器(按日期/小时分文件10MB 轮转,自动清理)
  • 8 个 admin API 端点(含覆盖率扫描、运行时开关)
  • admin-web 前端 DevTrace 页面覆盖率条、过滤器、请求表格、Span 树、设置抽屉)
  • 40 个属性测试全部通过19.69s

风险评估低。trace 模块通过 DEV_TRACE_ENABLED 开关控制,关闭时零开销。所有采集逻辑 try/except 包裹,不影响正常请求处理。无 DB schema 变更。

本次对话文件变更

新增文件Session 日志 + Prompt 日志)

  • docs/audit/prompt_logs/prompt_log_20260322_205347.md
  • docs/audit/session_logs/2026-03/22/66_5460a155_203419/main_01_93568fb4.md
  • docs/audit/session_logs/2026-03/22/66_5460a155_203419/sub_01_93568fb4.md
  • docs/audit/session_logs/2026-03/22/66_5460a155_203419/sub_02_93568fb4.md
  • docs/audit/session_logs/2026-03/22/67_f11b5687_205015/main_01_761a13a1.md
  • docs/audit/session_logs/2026-03/22/67_f11b5687_205015/sub_01_93568fb4.md
  • docs/audit/session_logs/2026-03/22/68_a233cc02_205218/main_01_c0515e2b.md

改动注解

后端 trace 模块(新建)

apps/backend/app/trace/__init__.py

  • 变更类型:新增
  • 原始原因dev-trace-log spec Task 1建立 trace 模块入口
  • 思路分析:模块入口文件,导出核心组件供外部使用
  • 修改结果trace 模块可通过 from app.trace import ... 引用

apps/backend/app/trace/config.py

  • 变更类型:新增
  • 原始原因Task 1集中管理 trace 配置(环境变量 + 运行时开关)
  • 思路分析TraceConfig 数据类,从环境变量读取 DEV_TRACE_ENABLEDDEV_TRACE_LOG_DIRDEV_TRACE_RETENTION_DAYS 等,支持运行时动态开关
  • 修改结果:所有 trace 组件统一从 TraceConfig 读取配置,关闭时零开销

apps/backend/app/trace/context.py

  • 变更类型:新增
  • 原始原因Task 2定义 TraceContext 和 TraceSpan 数据模型
  • 思路分析:使用 Python contextvars 实现请求级隔离TraceContext 持有 trace_id + span 列表TraceSpan 记录单个操作的耗时和元数据
  • 修改结果:所有采集点通过 contextvars 自动关联到当前请求的 trace

apps/backend/app/trace/writer.py

  • 变更类型:新增
  • 原始原因Task 3JSON Lines 日志写入器
  • 思路分析:按日期/小时分文件写入,单文件 10MB 轮转,异步写入不阻塞请求。提供 _sync_write() 供同步上下文WS/Job wrapper调用
  • 修改结果trace 数据持久化到 DEV_TRACE_LOG_DIR 目录

apps/backend/app/trace/cleanup.py

  • 变更类型:新增
  • 原始原因Task 4日志自动清理
  • 思路分析:按 DEV_TRACE_RETENTION_DAYS 配置删除过期日志文件
  • 修改结果:防止日志无限增长占满磁盘

apps/backend/app/trace/middleware.py

  • 变更类型:新增
  • 原始原因Task 6ASGI 中间件拦截 HTTP 请求
  • 思路分析TraceMiddleware 拦截 xcx_* 路由的请求,创建 TraceContext记录请求/响应元数据,请求结束时写入 trace
  • 修改结果:所有小程序 API 请求自动被 trace 采集

apps/backend/app/trace/decorators.py

  • 变更类型:新增
  • 原始原因Task 7@trace_service 装饰器
  • 思路分析:装饰器自动为 service 函数创建 span记录入参摘要、返回值类型、异常信息
  • 修改结果service 层函数加一行装饰器即可接入 trace

apps/backend/app/trace/db_wrapper.py

  • 变更类型:新增
  • 原始原因Task 8数据库连接生命周期追踪
  • 思路分析:包装数据库连接获取/释放,记录连接耗时和 SQL 执行信息
  • 修改结果:数据库操作在 trace 中可见

apps/backend/app/trace/error_handler.py

  • 变更类型:新增
  • 原始原因Task 9异常/错误全链路追踪
  • 思路分析:捕获未处理异常,在当前 trace 中记录错误堆栈和上下文
  • 修改结果:错误信息自动关联到触发请求的 trace

apps/backend/app/trace/sse_wrapper.py

  • 变更类型:新增
  • 原始原因Task 12SSE 流式响应追踪
  • 思路分析:包装 SSE 事件生成器,记录每个事件的发送时间和数据摘要
  • 修改结果AI 聊天等 SSE 接口的流式响应过程可追踪

apps/backend/app/trace/ws_wrapper.py

  • 变更类型:新增
  • 原始原因Task 13WebSocket 连接追踪
  • 思路分析:包装 WS 连接的 accept/send/receive/close使用 _sync_write() 避免异步上下文问题
  • 修改结果WebSocket 日志推送连接的生命周期可追踪

apps/backend/app/trace/job_wrapper.py

  • 变更类型:新增
  • 原始原因Task 14后台 Job 执行追踪
  • 思路分析:包装后台任务执行函数,记录 job 名称、耗时、成功/失败状态。同样使用 _sync_write() 处理同步上下文
  • 修改结果:后台定时任务和一次性 job 的执行过程可追踪

apps/backend/app/trace/coverage.py

  • 变更类型:新增
  • 原始原因Task 16.2,覆盖率扫描器
  • 思路分析grep 方式扫描代码库,统计已接入 trace 的路由/service/WS 端点占比
  • 修改结果admin API 可查询当前 trace 覆盖率

后端 API新建

apps/backend/app/routers/admin_dev_trace.py

  • 变更类型:新增
  • 原始原因Task 16.1admin API 端点
  • 思路分析8 个端点:查询 trace 列表、trace 详情、覆盖率、运行时开关、清理日志等。所有端点需 admin 鉴权
  • 修改结果:管理后台可通过 API 查看和管理 trace 数据

前端(新建)

apps/admin-web/src/types/devTrace.ts

  • 变更类型:新增
  • 原始原因Task 18.2TypeScript 类型定义
  • 思路分析:定义 TraceRecord、TraceSpan、CoverageReport 等接口类型,与后端 API 响应对齐
  • 修改结果:前端类型安全

apps/admin-web/src/api/devTrace.ts

  • 变更类型:新增
  • 原始原因Task 18.1API 调用层
  • 思路分析8 个 API 函数对应 8 个后端端点,使用 apiClient 统一处理鉴权和错误
  • 修改结果:前端页面可调用 trace API

apps/admin-web/src/pages/DevTrace.tsx

  • 变更类型:新增
  • 原始原因Task 19-20DevTrace 页面 + 设置抽屉
  • 思路分析:完整页面包含覆盖率进度条、时间/路由/状态过滤器、请求列表表格、Span 树展开、SettingsDrawer 运行时配置面板
  • 修改结果:管理后台新增 DevTrace 功能页面

测试文件(新建)

tests/test_trace_*.py10 个文件)

  • 变更类型:新增
  • 原始原因Task 5/11/15 各阶段 checkpoint 要求的属性测试
  • 思路分析:使用 hypothesis 框架,覆盖 TraceContext 创建/嵌套、Writer 写入/轮转、Cleanup 过期删除、Middleware 路由匹配、Decorator 异常处理、DB/SSE/WS/Job wrapper 等 40 个属性
  • 修改结果40/40 属性测试通过,验证 trace 模块核心逻辑正确性

已有文件修改(简要注解)

  • apps/backend/app/main.py — 注册 TraceMiddleware、job trace wrappers、admin_dev_trace router
  • apps/backend/app/database.py — 集成 trace db_wrapper
  • apps/backend/app/auth/dependencies.py — 添加 AUTH span 记录
  • apps/backend/app/middleware/response_wrapper.py — 集成 error_handler 调用
  • apps/backend/app/routers/xcx_chat.py — SSE trace 集成
  • apps/backend/app/routers/xcx_auth.py — 添加 @trace_service
  • apps/backend/app/routers/xcx_tasks.py — 添加 @trace_service
  • apps/backend/app/routers/xcx_notes.py — 添加 @trace_service
  • apps/backend/app/routers/xcx_performance.py — 添加 @trace_service
  • apps/backend/app/routers/xcx_ai_cache.py — 添加 @trace_service
  • apps/backend/app/routers/xcx_customers.py — 添加 @trace_service
  • apps/backend/app/routers/xcx_coaches.py — 添加 @trace_service
  • apps/backend/app/routers/xcx_board.py — 添加 @trace_service
  • apps/backend/app/routers/xcx_config.py — 添加 @trace_service
  • apps/backend/app/services/task_manager.py — 添加 @trace_service
  • apps/backend/app/services/note_service.py — 添加 @trace_service
  • apps/backend/app/services/performance_service.py — 添加 @trace_service
  • apps/backend/app/services/coach_service.py — 添加 @trace_service
  • apps/backend/app/services/customer_service.py — 添加 @trace_service
  • apps/backend/app/services/board_service.py — 添加 @trace_service
  • apps/backend/app/services/chat_service.py — 添加 @trace_service
  • apps/backend/app/ws/logs.py — WS trace 集成
  • apps/admin-web/src/App.tsx — DevTrace 路由 + 菜单项
  • .env — 添加 trace 环境变量DEV_TRACE_ENABLED 等)
  • .env.template — 添加 trace 环境变量模板
  • apps/backend/docs/API-REFERENCE.md — admin_dev_trace 路由文档
  • apps/backend/README.md — trace 模块说明
  • docs/architecture/backend-architecture.md — trace 模块架构
  • docs/DOCUMENTATION-MAP.md — 新增 trace 相关条目
  • docs/deployment/EXPORT-PATHS.md — DEV_TRACE_LOG_DIR

合规检查

检查项 状态
文档同步 无缺失code_without_docs 为空)
新增迁移 SQL 无(纯应用层,无 DB 变更)
DDL 基线 ⚠️ has_ddl_baseline=false但本次无新增迁移不影响
OpenAPI spec 无需同步api_changed=false
BD 手册 无需更新(无 DB schema 变更)

验证结果

  • 40 个属性测试全部通过19.69s
  • 无 DB 变更
  • 无安全风险admin 鉴权保护所有 trace API
  • trace 模块通过开关控制,关闭时零开销