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

215 lines
8.5 KiB
Markdown
Raw Permalink Normal View History

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