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