8.5 KiB
8.5 KiB
会话记录:日志记录功能
元数据
- 需求编号:002-06
- 需求名称:日志记录
- 会话日期:2026-02-03
- 会话状态:进行中
阶段记录
阶段 1:需求定义
- 状态:已完成
- 时间:2026-01-28
- 文档:日志记录需求文档
- 关键决策:
- 使用 apex.jar 中的 LogInfo、LogType、LogCategory、LogCategoryLevel 类
- 固定使用 source org 类型
- 日志信息存储到数据库
- 提供 REST API 接口
- 使用 ReentrantLock 保证多线程安全
阶段 2:方案设计
- 状态:已完成
- 时间:2026-02-03
- 文档:日志记录-设计
- 关键决策:
- 采用分层架构(Controller -> Service -> Mapper -> Entity)
- 使用 MyBatis-Plus 进行数据访问
- 实现 6 个 RESTful API 端点
- 使用 ReentrantLock 保证多线程安全
- 支持日志信息持久化到数据库
- 支持调试头部设置和清除
- 支持执行匿名代码并获取日志
阶段 3:方案决策
- 状态:已完成
- 时间:2026-02-03
- 文档:日志记录技术选型-ADR
- 关键决策:
- 决策 1:使用数据库持久化(MySQL),创建 2 张表(datai_apex_log、datai_apex_log_category)
- 决策 2:使用 ReentrantLock 保证多线程安全
- 决策 3:集中式调试头部管理
- 决策 4:独立表存储日志分类
- 决策 5:先获取日志信息,再保存到数据库
- 决策 6:先设置调试头部,再执行代码,最后获取日志
- 决策 7:独立权限标识(apex:log:query、apex:log:manage、apex:log:execute)
阶段 4:数据库结构生成
- 状态:已完成
- 时间:2026-02-03
- 文档:日志记录-SQL 脚本
- 关键变更:
- 创建
datai_apex_log表(Apex 日志表),包含 17 个字段 - 创建
datai_apex_log_category表(Apex 日志分类表),包含 5 个字段 - 创建 3 个数据字典(apex_log_category、apex_log_level、apex_log_type)
- 添加 7 个索引(主键索引、唯一索引、5 个普通索引)
- 添加 1 个外键约束(fk_log_category_log)
- 创建
阶段 5:提示词生成
- 状态:已完成
- 时间:2026-02-03
- 文档:日志记录-提示词
- 关键内容:
- 引用真源(需求文档、设计文档、决策记录、SQL 脚本)
- 需求描述(6 个核心功能)
- 设计方案(分层架构、模块结构)
- 输出格式要求(必须包含的文件、REST API 接口列表)
- 代码规范要求(命名规范、注释规范、日志规范、异常处理)
- 测试要求(单元测试覆盖率、测试用例场景)
- 实现要点(核心实现代码示例)
对话记录
2026-02-03
用户:d:\idea_demo\datai\datai-scenes\datai-scene-salesforce\docs\requirements\sub\2026-01-28-002-06-日志记录.md 进入阶段二
助手: 已完成日志记录功能的设计文档创建,包含:
- 架构设计(分层架构图)
- 数据模型(2 张数据库表:datai_apex_log、datai_apex_log_category)
- 接口设计(6 个 RESTful API)
- 核心功能(获取日志、设置调试头部、清除调试头部、查询日志列表、获取日志详情、执行匿名代码并获取日志)
- 集成策略(与 Salesforce Apex API 集成)
- 多线程安全设计(使用 ReentrantLock)
已更新:
- 项目索引 index.md
- 需求文档(添加设计文档引用)
待办事项:
- 创建设计文档
- 更新项目索引
- 更新需求文档
- 进入阶段 3(方案决策)
2026-02-03(阶段 3 完成)
用户:进入
助手: 已完成日志记录功能的架构决策记录(ADR)创建,包含 7 个关键决策:
- 数据持久化策略:使用数据库持久化(MySQL),创建 2 张表(datai_apex_log、datai_apex_log_category)
- 多线程安全设计:使用 ReentrantLock 保证多线程安全
- 调试头部管理策略:集中式调试头部管理
- 日志分类存储策略:独立表存储日志分类
- 日志信息获取策略:先获取日志信息,再保存到数据库
- 执行匿名代码并获取日志策略:先设置调试头部,再执行代码,最后获取日志
- 权限控制策略:独立权限标识(apex:log:query、apex:log:manage、apex:log:execute)
已更新:
- 项目索引 index.md
- 设计文档(添加决策记录引用)
- 会话记录
2026-02-03(阶段 4 完成)
用户:进入下一阶段(数据库结构生成)
助手: 已完成日志记录功能的数据库结构生成,包含:
- 创建
datai_apex_log表(Apex 日志表),包含 17 个字段 - 创建
datai_apex_log_category表(Apex 日志分类表),包含 5 个字段 - 创建 3 个数据字典(apex_log_category、apex_log_level、apex_log_type)
- 添加 7 个索引(主键索引、唯一索引、5 个普通索引)
- 添加 1 个外键约束(fk_log_category_log)
已更新:
- 项目索引 index.md
- 设计文档(添加 SQL 脚本引用)
- 会话记录
2026-02-03(阶段 5 完成)
用户:进入下一个阶段
助手: 已完成日志记录功能的提示词生成,包含:
- 引用真源(需求文档、设计文档、决策记录、SQL 脚本)
- 需求描述(6 个核心功能:获取日志信息、设置调试头部、清除调试头部、查询日志列表、获取日志详情、执行匿名代码并获取日志)
- 设计方案(分层架构、模块结构)
- 输出格式要求(必须包含的文件、REST API 接口列表)
- 代码规范要求(命名规范、注释规范、日志规范、异常处理)
- 测试要求(单元测试覆盖率、测试用例场景)
- 实现要点(核心实现代码示例)
已更新:
- 项目索引 index.md
- 需求文档(添加提示词引用)
- 会话记录
生成的文档
| 文档类型 | 文档路径 | 状态 |
|---|---|---|
| 需求文档 | docs/requirements/sub/2026-01-28-002-06-日志记录.md | 已完成 |
| 设计文档 | docs/design/2026-02-03-002-06-日志记录-设计.md | 已完成 |
| 决策记录 | docs/decisions/2026-02-03-002-06-ADR-日志记录技术选型.md | 已完成 |
| SQL 脚本 | docs/sql/2026-02-03-002-06-日志记录.sql | 已完成 |
| 提示词文档 | docs/prompts/2026-02-03-002-06-prompt-日志记录.md | 已完成 |
| 会话记录 | docs/sessions/2026-02-03-002-06-session.md | 进行中 |
关键决策记录
架构决策
- 决策:采用分层架构(Controller -> Service -> Mapper -> Entity)
- 理由:
- 与其他 Apex 功能保持一致
- 便于维护和扩展
- 符合项目整体架构风格
数据模型决策
- 决策:创建 2 张表(datai_apex_log、datai_apex_log_category)
- 理由:
- 独立存储日志信息
- 支持日志分类的灵活查询
- 一对多关系设计,一个日志可以包含多个分类
多线程安全决策
- 决策:使用 ReentrantLock 保证多线程安全
- 理由:
- 调试头部设置和清除操作需要保证原子性
- 防止并发设置导致调试头部混乱
- 方法级别的锁粒度,平衡性能和安全性
API 设计决策
- 决策:提供 6 个 RESTful API 端点
- 理由:
- 覆盖所有核心功能
- 支持日志查询和详情查看
- 支持调试头部管理
- 支持执行匿名代码并获取日志
集成方案决策
- 决策:使用 ApexConnectionFactory 获取 SoapConnection 实例
- 理由:
- 复用现有的连接管理机制
- 统一的连接管理,避免重复代码
- 固定使用 source org 类型,简化逻辑
数据字典设计
- 决策:创建 3 个数据字典(apex_log_category、apex_log_level、apex_log_type)
- 理由:
- 标准化日志分类、级别和类型
- 便于前端下拉选择
- 便于数据统计和查询
数据库结构决策
- 决策:创建 2 张表(datai_apex_log、datai_apex_log_category)
- 理由:
- datai_apex_log 表存储日志基本信息
- datai_apex_log_category 表存储日志分类详情
- 一对多关系,支持一个日志包含多个分类
- 级联删除,删除日志时自动删除关联分类