623 lines
15 KiB
Markdown
623 lines
15 KiB
Markdown
# API 文档:日志记录功能
|
||
|
||
## 元数据
|
||
- **需求编号**:002-06
|
||
- **需求名称**:日志记录
|
||
- **版本号**:v1.0.0
|
||
- **创建时间**:2026-02-05
|
||
- **创建人**:AI Assistant
|
||
|
||
## API 概述
|
||
|
||
日志记录 API 提供 Salesforce Apex 日志的查询、调试头部管理和日志分类管理功能。该 API 为测试执行、代码覆盖率、Flow 覆盖率等功能提供日志追踪支持,便于问题排查和性能分析。
|
||
|
||
### 基础信息
|
||
- **基础路径**:`/apex`
|
||
- **权限前缀**:`apex:apexlog`
|
||
- **数据格式**:JSON
|
||
- **字符编码**:UTF-8
|
||
|
||
### 核心功能
|
||
1. **日志查询**:支持分页查询 Apex 日志记录,可按应用名称、位置、操作、状态、时间范围筛选
|
||
2. **日志详情**:根据 ID 查询单个日志记录的详细信息
|
||
3. **调试头部管理**:支持设置和清除调试头部信息
|
||
4. **日志分类管理**:支持日志分类的创建、查询、更新、删除操作
|
||
|
||
## 接口列表
|
||
|
||
### 1. 查询日志列表
|
||
|
||
- **功能描述**:分页查询 Apex 日志记录列表,支持多种筛选条件
|
||
- **请求方式**:GET
|
||
- **请求路径**:`/apex/apexlog/list`
|
||
- **权限要求**:`apex:apexlog:list`
|
||
|
||
#### 请求参数
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| pageNum | Integer | 否 | 当前页码,默认 1 |
|
||
| pageSize | Integer | 否 | 每页记录数,默认 10 |
|
||
| application | String | 否 | 应用程序名称,支持模糊查询 |
|
||
| location | String | 否 | 位置信息,支持模糊查询 |
|
||
| operation | String | 否 | 操作类型,支持模糊查询 |
|
||
| status | String | 否 | 日志状态 |
|
||
| startTime | String | 否 | 开始时间(格式:yyyy-MM-dd HH:mm:ss) |
|
||
| endTime | String | 否 | 结束时间(格式:yyyy-MM-dd HH:mm:ss) |
|
||
|
||
#### 响应参数
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| code | Integer | 状态码(200 成功,其他失败) |
|
||
| msg | String | 提示信息 |
|
||
| data | Object | 响应数据 |
|
||
| data.total | Long | 总记录数 |
|
||
| data.rows | Array | 日志记录列表 |
|
||
| data.rows[].id | Long | 日志 ID |
|
||
| data.rows[].application | String | 应用程序名称 |
|
||
| data.rows[].location | String | 位置信息 |
|
||
| data.rows[].operation | String | 操作类型 |
|
||
| data.rows[].status | String | 日志状态 |
|
||
| data.rows[].logLength | Integer | 日志长度 |
|
||
| data.rows[].duration | Long | 持续时间(毫秒) |
|
||
| data.rows[].startTime | String | 开始时间 |
|
||
| data.rows[].createTime | String | 创建时间 |
|
||
|
||
#### 成功示例
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "操作成功",
|
||
"data": {
|
||
"total": 100,
|
||
"rows": [
|
||
{
|
||
"id": 1,
|
||
"application": "Apex",
|
||
"location": "SystemLog",
|
||
"operation": "CodeUnit",
|
||
"status": "Success",
|
||
"logLength": 2048,
|
||
"duration": 150,
|
||
"startTime": "2026-02-05 10:30:00",
|
||
"createTime": "2026-02-05 10:30:05"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 失败示例
|
||
|
||
```json
|
||
{
|
||
"code": 500,
|
||
"msg": "查询日志列表失败"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 2. 获取日志详情
|
||
|
||
- **功能描述**:根据 ID 查询单个日志记录的详细信息
|
||
- **请求方式**:GET
|
||
- **请求路径**:`/apex/apexlog/{id}`
|
||
- **权限要求**:`apex:apexlog:query`
|
||
|
||
#### 请求参数
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| id | Long | 是 | 日志 ID(路径参数) |
|
||
|
||
#### 响应参数
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| code | Integer | 状态码(200 成功,其他失败) |
|
||
| msg | String | 提示信息 |
|
||
| data | Object | 日志详情 |
|
||
| data.id | Long | 日志 ID |
|
||
| data.application | String | 应用程序名称 |
|
||
| data.location | String | 位置信息 |
|
||
| data.operation | String | 操作类型 |
|
||
| data.status | String | 日志状态 |
|
||
| data.logLength | Integer | 日志长度 |
|
||
| data.logContent | String | 日志内容 |
|
||
| data.duration | Long | 持续时间(毫秒) |
|
||
| data.startTime | String | 开始时间 |
|
||
| data.endTime | String | 结束时间 |
|
||
| data.userId | String | 用户 ID |
|
||
| data.createTime | String | 创建时间 |
|
||
|
||
#### 成功示例
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "操作成功",
|
||
"data": {
|
||
"id": 1,
|
||
"application": "Apex",
|
||
"location": "SystemLog",
|
||
"operation": "CodeUnit",
|
||
"status": "Success",
|
||
"logLength": 2048,
|
||
"logContent": "EXECUTION_STARTED...",
|
||
"duration": 150,
|
||
"startTime": "2026-02-05 10:30:00",
|
||
"endTime": "2026-02-05 10:30:02",
|
||
"userId": "005xx000001X9YZAA0",
|
||
"createTime": "2026-02-05 10:30:05"
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 失败示例
|
||
|
||
```json
|
||
{
|
||
"code": 500,
|
||
"msg": "日志不存在"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 3. 设置调试头部
|
||
|
||
- **功能描述**:设置调试头部信息,包括日志分类和日志类型
|
||
- **请求方式**:POST
|
||
- **请求路径**:`/apex/apexlog/debugHeader`
|
||
- **权限要求**:`apex:apexlog:debug`
|
||
|
||
#### 请求参数
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| logCategories | Array | 是 | 日志分类数组 |
|
||
| logCategories[].category | String | 是 | 日志分类(DB、APEX_CODE、VALIDATION、WORKFLOW、CALLOUT、SYSTEM) |
|
||
| logCategories[].level | String | 是 | 日志级别(None、Fine、Finer、Finest、Debug、Info、Warn、Error) |
|
||
| logType | String | 是 | 日志类型(ApexCode、ApexProfiling、Callout、Database、System) |
|
||
|
||
#### 请求示例
|
||
|
||
```json
|
||
{
|
||
"logCategories": [
|
||
{
|
||
"category": "DB",
|
||
"level": "FINE"
|
||
},
|
||
{
|
||
"category": "APEX_CODE",
|
||
"level": "DEBUG"
|
||
},
|
||
{
|
||
"category": "VALIDATION",
|
||
"level": "INFO"
|
||
}
|
||
],
|
||
"logType": "ApexCode"
|
||
}
|
||
```
|
||
|
||
#### 响应参数
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| code | Integer | 状态码(200 成功,其他失败) |
|
||
| msg | String | 提示信息 |
|
||
| data | Object | 响应数据(null) |
|
||
|
||
#### 成功示例
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "调试头部设置成功",
|
||
"data": null
|
||
}
|
||
```
|
||
|
||
#### 失败示例
|
||
|
||
```json
|
||
{
|
||
"code": 500,
|
||
"msg": "调试头部设置失败: 无效的日志分类"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 4. 清除调试头部
|
||
|
||
- **功能描述**:清除已设置的调试头部信息
|
||
- **请求方式**:DELETE
|
||
- **请求路径**:`/apex/apexlog/debugHeader`
|
||
- **权限要求**:`apex:apexlog:debug`
|
||
|
||
#### 请求参数
|
||
|
||
无
|
||
|
||
#### 响应参数
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| code | Integer | 状态码(200 成功,其他失败) |
|
||
| msg | String | 提示信息 |
|
||
| data | Object | 响应数据(null) |
|
||
|
||
#### 成功示例
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "调试头部清除成功",
|
||
"data": null
|
||
}
|
||
```
|
||
|
||
#### 失败示例
|
||
|
||
```json
|
||
{
|
||
"code": 500,
|
||
"msg": "调试头部清除失败"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 5. 查询日志分类列表
|
||
|
||
- **功能描述**:分页查询日志分类列表,支持按分类名称、级别筛选
|
||
- **请求方式**:GET
|
||
- **请求路径**:`/apex/apexlogcategory/list`
|
||
- **权限要求**:`apex:apexlogcategory:list`
|
||
|
||
#### 请求参数
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| pageNum | Integer | 否 | 当前页码,默认 1 |
|
||
| pageSize | Integer | 否 | 每页记录数,默认 10 |
|
||
| categoryName | String | 否 | 分类名称,支持模糊查询 |
|
||
| categoryLevel | String | 否 | 日志级别 |
|
||
| enabled | Boolean | 否 | 是否启用 |
|
||
|
||
#### 响应参数
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| code | Integer | 状态码(200 成功,其他失败) |
|
||
| msg | String | 提示信息 |
|
||
| data | Object | 响应数据 |
|
||
| data.total | Long | 总记录数 |
|
||
| data.rows | Array | 日志分类列表 |
|
||
| data.rows[].id | Long | 分类 ID |
|
||
| data.rows[].categoryName | String | 分类名称 |
|
||
| data.rows[].categoryLevel | String | 日志级别 |
|
||
| data.rows[].description | String | 描述 |
|
||
| data.rows[].enabled | Boolean | 是否启用 |
|
||
| data.rows[].createTime | String | 创建时间 |
|
||
|
||
#### 成功示例
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "操作成功",
|
||
"data": {
|
||
"total": 10,
|
||
"rows": [
|
||
{
|
||
"id": 1,
|
||
"categoryName": "数据库操作",
|
||
"categoryLevel": "FINE",
|
||
"description": "记录数据库操作日志",
|
||
"enabled": true,
|
||
"createTime": "2026-02-05 10:00:00"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 6. 获取日志分类详情
|
||
|
||
- **功能描述**:根据 ID 查询单个日志分类的详细信息
|
||
- **请求方式**:GET
|
||
- **请求路径**:`/apex/apexlogcategory/{id}`
|
||
- **权限要求**:`apex:apexlogcategory:query`
|
||
|
||
#### 请求参数
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| id | Long | 是 | 分类 ID(路径参数) |
|
||
|
||
#### 响应参数
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| code | Integer | 状态码(200 成功,其他失败) |
|
||
| msg | String | 提示信息 |
|
||
| data | Object | 分类详情 |
|
||
| data.id | Long | 分类 ID |
|
||
| data.categoryName | String | 分类名称 |
|
||
| data.categoryLevel | String | 日志级别 |
|
||
| data.description | String | 描述 |
|
||
| data.enabled | Boolean | 是否启用 |
|
||
| data.createTime | String | 创建时间 |
|
||
| data.updateTime | String | 更新时间 |
|
||
|
||
#### 成功示例
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "操作成功",
|
||
"data": {
|
||
"id": 1,
|
||
"categoryName": "数据库操作",
|
||
"categoryLevel": "FINE",
|
||
"description": "记录数据库操作日志",
|
||
"enabled": true,
|
||
"createTime": "2026-02-05 10:00:00",
|
||
"updateTime": "2026-02-05 10:00:00"
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 7. 创建日志分类
|
||
|
||
- **功能描述**:创建新的日志分类配置
|
||
- **请求方式**:POST
|
||
- **请求路径**:`/apex/apexlogcategory`
|
||
- **权限要求**:`apex:apexlogcategory:add`
|
||
|
||
#### 请求参数
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| categoryName | String | 是 | 分类名称,长度 1-100 字符 |
|
||
| categoryLevel | String | 是 | 日志级别(None、Fine、Finer、Finest、Debug、Info、Warn、Error) |
|
||
| description | String | 否 | 描述,长度 0-500 字符 |
|
||
| enabled | Boolean | 否 | 是否启用,默认 true |
|
||
|
||
#### 请求示例
|
||
|
||
```json
|
||
{
|
||
"categoryName": "数据库操作",
|
||
"categoryLevel": "FINE",
|
||
"description": "记录数据库操作日志",
|
||
"enabled": true
|
||
}
|
||
```
|
||
|
||
#### 响应参数
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| code | Integer | 状态码(200 成功,其他失败) |
|
||
| msg | String | 提示信息 |
|
||
| data | Object | 响应数据(null) |
|
||
|
||
#### 成功示例
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "创建成功",
|
||
"data": null
|
||
}
|
||
```
|
||
|
||
#### 失败示例
|
||
|
||
```json
|
||
{
|
||
"code": 500,
|
||
"msg": "创建失败: 分类名称已存在"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 8. 更新日志分类
|
||
|
||
- **功能描述**:更新现有日志分类配置
|
||
- **请求方式**:PUT
|
||
- **请求路径**:`/apex/apexlogcategory`
|
||
- **权限要求**:`apex:apexlogcategory:edit`
|
||
|
||
#### 请求参数
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| id | Long | 是 | 分类 ID |
|
||
| categoryName | String | 是 | 分类名称,长度 1-100 字符 |
|
||
| categoryLevel | String | 是 | 日志级别 |
|
||
| description | String | 否 | 描述,长度 0-500 字符 |
|
||
| enabled | Boolean | 否 | 是否启用 |
|
||
|
||
#### 请求示例
|
||
|
||
```json
|
||
{
|
||
"id": 1,
|
||
"categoryName": "数据库操作",
|
||
"categoryLevel": "DEBUG",
|
||
"description": "记录数据库操作日志(更新)",
|
||
"enabled": true
|
||
}
|
||
```
|
||
|
||
#### 响应参数
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| code | Integer | 状态码(200 成功,其他失败) |
|
||
| msg | String | 提示信息 |
|
||
| data | Object | 响应数据(null) |
|
||
|
||
#### 成功示例
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "更新成功",
|
||
"data": null
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 9. 删除日志分类
|
||
|
||
- **功能描述**:删除日志分类配置(支持批量删除)
|
||
- **请求方式**:DELETE
|
||
- **请求路径**:`/apex/apexlogcategory/{ids}`
|
||
- **权限要求**:`apex:apexlogcategory:remove`
|
||
|
||
#### 请求参数
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--------|------|------|------|
|
||
| ids | String | 是 | 分类 ID 列表,多个 ID 用逗号分隔(路径参数) |
|
||
|
||
#### 响应参数
|
||
|
||
| 参数名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| code | Integer | 状态码(200 成功,其他失败) |
|
||
| msg | String | 提示信息 |
|
||
| data | Object | 响应数据(null) |
|
||
|
||
#### 成功示例
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "删除成功",
|
||
"data": null
|
||
}
|
||
```
|
||
|
||
#### 失败示例
|
||
|
||
```json
|
||
{
|
||
"code": 500,
|
||
"msg": "删除失败: 分类不存在"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 错误码
|
||
|
||
### 日志记录错误码
|
||
|
||
| 错误码 | 错误名称 | 说明 | HTTP 状态码 |
|
||
|--------|---------|------|-------------|
|
||
| APEX_LOG_001 | LOG_NOT_FOUND | 日志不存在 | 404 |
|
||
| APEX_LOG_002 | LOG_QUERY_FAILED | 日志查询失败 | 500 |
|
||
| APEX_LOG_003 | DEBUG_HEADER_SET_FAILED | 调试头部设置失败 | 500 |
|
||
| APEX_LOG_004 | DEBUG_HEADER_CLEAR_FAILED | 调试头部清除失败 | 500 |
|
||
| APEX_LOG_005 | INVALID_LOG_CATEGORY | 无效的日志分类 | 400 |
|
||
| APEX_LOG_006 | INVALID_LOG_LEVEL | 无效的日志级别 | 400 |
|
||
| APEX_LOG_007 | INVALID_LOG_TYPE | 无效的日志类型 | 400 |
|
||
|
||
### 日志分类错误码
|
||
|
||
| 错误码 | 错误名称 | 说明 | HTTP 状态码 |
|
||
|--------|---------|------|-------------|
|
||
| APEX_LOG_CATEGORY_001 | CATEGORY_NOT_FOUND | 日志分类不存在 | 404 |
|
||
| APEX_LOG_CATEGORY_002 | CATEGORY_CREATE_FAILED | 日志分类创建失败 | 500 |
|
||
| APEX_LOG_CATEGORY_003 | CATEGORY_UPDATE_FAILED | 日志分类更新失败 | 500 |
|
||
| APEX_LOG_CATEGORY_004 | CATEGORY_DELETE_FAILED | 日志分类删除失败 | 500 |
|
||
| APEX_LOG_CATEGORY_005 | CATEGORY_NAME_EXISTS | 分类名称已存在 | 400 |
|
||
|
||
### 通用错误码
|
||
|
||
| 错误码 | 错误名称 | 说明 | HTTP 状态码 |
|
||
|--------|---------|------|-------------|
|
||
| 400 | BAD_REQUEST | 请求参数错误 | 400 |
|
||
| 401 | UNAUTHORIZED | 未授权 | 401 |
|
||
| 403 | FORBIDDEN | 禁止访问 | 403 |
|
||
| 404 | NOT_FOUND | 资源不存在 | 404 |
|
||
| 500 | INTERNAL_ERROR | 服务器内部错误 | 500 |
|
||
|
||
## 枚举值定义
|
||
|
||
### 日志分类(LogCategory)
|
||
|
||
| 值 | 说明 |
|
||
|----|------|
|
||
| DB | 数据库操作 |
|
||
| APEX_CODE | Apex 代码 |
|
||
| VALIDATION | 验证规则 |
|
||
| WORKFLOW | 工作流 |
|
||
| CALLOUT | 外部调用 |
|
||
| SYSTEM | 系统操作 |
|
||
|
||
### 日志级别(LogCategoryLevel)
|
||
|
||
| 值 | 说明 |
|
||
|----|------|
|
||
| None | 无 |
|
||
| Fine | 细粒度 |
|
||
| Finer | 更细粒度 |
|
||
| Finest | 最细粒度 |
|
||
| Debug | 调试 |
|
||
| Info | 信息 |
|
||
| Warn | 警告 |
|
||
| Error | 错误 |
|
||
|
||
### 日志类型(LogType)
|
||
|
||
| 值 | 说明 |
|
||
|----|------|
|
||
| ApexCode | Apex 代码日志 |
|
||
| ApexProfiling | Apex 性能分析日志 |
|
||
| Callout | 外部调用日志 |
|
||
| Database | 数据库操作日志 |
|
||
| System | 系统日志 |
|
||
|
||
### 日志状态(LogStatus)
|
||
|
||
| 值 | 说明 |
|
||
|----|------|
|
||
| Success | 成功 |
|
||
| Failed | 失败 |
|
||
| Pending | 进行中 |
|
||
|
||
## 相关文档
|
||
|
||
- [需求文档](../requirements/sub/2026-01-28-002-06-日志记录.md)
|
||
- [设计文档](../design/2026-02-03-002-06-日志记录-设计.md)
|
||
- [决策记录](../decisions/2026-02-03-002-06-ADR-日志记录技术选型.md)
|
||
- [SQL 脚本](../sql/2026-02-03-002-06-日志记录.sql)
|
||
- [提示词](../prompts/2026-02-03-002-06-prompt-日志记录.md)
|
||
- [变更日志](../changelog/2026-02-05-002-06-changelog.md)
|
||
- [会话记录](../sessions/2026-02-05-002-06-session.md)
|
||
- [复盘文档](../retros/2026-02-05-002-06-retro.md)
|
||
|
||
## 版本历史
|
||
|
||
| 版本号 | 日期 | 变更内容 | 作者 |
|
||
|--------|------|----------|------|
|
||
| v1.0.0 | 2026-02-05 | 初始版本,实现日志记录功能的所有 API 接口 | AI Assistant |
|