# 会话记录:日志记录功能 ## 元数据 - 需求编号:002-06 - 需求名称:日志记录 - 会话日期:2026-02-03 - 会话状态:进行中 ## 阶段记录 ### 阶段 1:需求定义 - **状态**:已完成 - **时间**:2026-01-28 - **文档**:[日志记录需求文档](../requirements/sub/2026-01-28-002-06-日志记录.md) - **关键决策**: - 使用 apex.jar 中的 LogInfo、LogType、LogCategory、LogCategoryLevel 类 - 固定使用 source org 类型 - 日志信息存储到数据库 - 提供 REST API 接口 - 使用 ReentrantLock 保证多线程安全 ### 阶段 2:方案设计 - **状态**:已完成 - **时间**:2026-02-03 - **文档**:[日志记录-设计](../design/2026-02-03-002-06-日志记录-设计.md) - **关键决策**: - 采用分层架构(Controller -> Service -> Mapper -> Entity) - 使用 MyBatis-Plus 进行数据访问 - 实现 6 个 RESTful API 端点 - 使用 ReentrantLock 保证多线程安全 - 支持日志信息持久化到数据库 - 支持调试头部设置和清除 - 支持执行匿名代码并获取日志 ### 阶段 3:方案决策 - **状态**:已完成 - **时间**:2026-02-03 - **文档**:[日志记录技术选型-ADR](../decisions/2026-02-03-002-06-ADR-日志记录技术选型.md) - **关键决策**: - **决策 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 脚本](../sql/2026-02-03-002-06-日志记录.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 - **文档**:[日志记录-提示词](../prompts/2026-02-03-002-06-prompt-日志记录.md) - **关键内容**: - 引用真源(需求文档、设计文档、决策记录、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` 进入阶段二 **助手**: 已完成日志记录功能的设计文档创建,包含: 1. 架构设计(分层架构图) 2. 数据模型(2 张数据库表:datai_apex_log、datai_apex_log_category) 3. 接口设计(6 个 RESTful API) 4. 核心功能(获取日志、设置调试头部、清除调试头部、查询日志列表、获取日志详情、执行匿名代码并获取日志) 5. 集成策略(与 Salesforce Apex API 集成) 6. 多线程安全设计(使用 ReentrantLock) 已更新: - 项目索引 index.md - 需求文档(添加设计文档引用) **待办事项**: - [x] 创建设计文档 - [x] 更新项目索引 - [x] 更新需求文档 - [x] 进入阶段 3(方案决策) ### 2026-02-03(阶段 3 完成) **用户**:进入 **助手**: 已完成日志记录功能的架构决策记录(ADR)创建,包含 7 个关键决策: 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) 已更新: - 项目索引 index.md - 设计文档(添加决策记录引用) - 会话记录 ### 2026-02-03(阶段 4 完成) **用户**:进入下一阶段(数据库结构生成) **助手**: 已完成日志记录功能的数据库结构生成,包含: 1. 创建 `datai_apex_log` 表(Apex 日志表),包含 17 个字段 2. 创建 `datai_apex_log_category` 表(Apex 日志分类表),包含 5 个字段 3. 创建 3 个数据字典(apex_log_category、apex_log_level、apex_log_type) 4. 添加 7 个索引(主键索引、唯一索引、5 个普通索引) 5. 添加 1 个外键约束(fk_log_category_log) 已更新: - 项目索引 index.md - 设计文档(添加 SQL 脚本引用) - 会话记录 ### 2026-02-03(阶段 5 完成) **用户**:进入下一个阶段 **助手**: 已完成日志记录功能的提示词生成,包含: 1. 引用真源(需求文档、设计文档、决策记录、SQL 脚本) 2. 需求描述(6 个核心功能:获取日志信息、设置调试头部、清除调试头部、查询日志列表、获取日志详情、执行匿名代码并获取日志) 3. 设计方案(分层架构、模块结构) 4. 输出格式要求(必须包含的文件、REST API 接口列表) 5. 代码规范要求(命名规范、注释规范、日志规范、异常处理) 6. 测试要求(单元测试覆盖率、测试用例场景) 7. 实现要点(核心实现代码示例) 已更新: - 项目索引 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 表存储日志分类详情 - 一对多关系,支持一个日志包含多个分类 - 级联删除,删除日志时自动删除关联分类