datai/datai-scenes/datai-scene-salesforce/docs/sessions/2026-02-03-002-06-session.md

215 lines
8.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 会话记录:日志记录功能
## 元数据
- 需求编号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 表存储日志分类详情
- 一对多关系,支持一个日志包含多个分类
- 级联删除,删除日志时自动删除关联分类