外观
日志查询
日志查询使用公共 Controller,存储后端通过 SystemLogQueryProvider 提供实际查询。支持 RDBMS、MongoDB、Elasticsearch 和 ClickHouse;JSON Lines、CSV、SQL 文件及 MQ 不提供查询能力。
1. 添加查询入口
在已配置 Business BOM 的应用中,引入所需的 Controller 和数据库存储模块。例如使用 MongoDB 提供管理端查询:
xml
<dependencies>
<dependency>
<groupId>com.own.business</groupId>
<artifactId>springboot-business-system-log-controller-admin</artifactId>
</dependency>
<dependency>
<groupId>com.own.business</groupId>
<artifactId>springboot-business-system-log-persistence-mongodb</artifactId>
</dependency>
</dependencies>还需配置所选数据库连接。用户端引入 springboot-business-system-log-controller-app,两端可同时使用。Controller 不自动引入数据库后端。
2. 选择查询来源
只有一个查询后端时自动选择。应用装配了多个数据库后端时,配置查询来源:
yaml
own:
system-log:
query:
backend: MONGODB可选值为 MONGODB、ELASTIC、CLICKHOUSE、RDBMS,兼容小写。配置只影响查询来源,不改变日志保存目标。
同时引入数据库和文件后端时,只在已装配的数据库 Provider 中选择。不能将 FILE_JSON、FILE_CSV 或 FILE_RDBMS 配置为查询来源;直接查看 JSON Lines 文件见 JSON 文件存储。
指定后端未装配、缺少后端或存在多个候选实现时,查询会报错。仅保存日志的应用不需要配置查询来源。
3. 调用接口
管理端前缀为 /api/admin/system/log;用户端为 /api/app/system/log。外层响应统一为 ResultModel,公共字段与成功标识的边界见 Base 响应约定。
| 方法与路径 | 入参 | 返回的业务数据 |
|---|---|---|
POST /page | SystemLogQuery JSON | PageModel<SystemLogVo> |
GET /{id} | 字符串日志 ID | SystemLogVo 或空 |
GET /trace/{traceId} | 链路 ID | 范围内最新一条 SystemLogVo |
例如,分页查看成功日志:
http
POST /api/admin/system/log/page
Content-Type: application/json
{
"page": 1,
"rows": 20,
"status": 1
}查询条件
| 条件 | 字段示例 |
|---|---|
| 分页 | page、rows |
| 用户与来源 | userId、userName、client、ip |
| 操作 | moduleName、operationName、methodName、requestUrl |
| 响应 | code、message、status |
| 链路 | traceId |
| 时间 | requestTimeStart、requestTimeEnd、startTime、endTime |
code 表示业务响应码,操作编码对应 methodName。各后端保留自己的过滤语义,不支持的非空条件会被拒绝;startTime/endTime 可用于 ClickHouse 和 Elasticsearch,searchAfter 用于 Elasticsearch 深分页。
返回字段
| 字段 | 含义 |
|---|---|
id | 存储记录 ID,统一返回字符串 |
code / message | 业务响应码与消息 |
methodName | 操作编码或方法签名 |
status | 0 未知、1 成功、2 失败 |
requestTime / responseTime | Asia/Shanghai 时区的 LocalDateTime |
extra.systemLog | 完整采集快照,包括原始事件 ID、发起人及响应 |
存储记录 ID 不一定等于原始事件 ID。非数字主体 ID 不强制转换为用户外键,仍可在原始快照中查看。
用户范围与访问控制
用户端分页会覆盖请求中的 userId,详情和链路查询也限定为当前会话用户;缺少用户 ID 时拒绝访问。
管理端声明 SYSTEM_LOG_MANAGE 权限模块。当前管理端 GET /trace/{traceId} 带有 @LoginIgnore,接入时应按实际注解配置访问控制,不能视为默认强制登录。
链路查询返回最新一条日志,不返回该链路的全部日志列表。
Elasticsearch 统计
查询来源为 ELASTIC 时,管理端提供以下统计接口,前缀为 /api/admin/system/log/stats,方法均为 POST,请求体为 SystemLogStatsTimeRangeQuery:
| 路径 | 用途 |
|---|---|
/time/range | 按时间范围统计日志 |
/user/time/range | 按用户和时间范围统计 |
/user/count/time/range | 统计用户数量 |
/only/app/user/count/time/range | 仅统计 App 用户数量 |
/device/count/time/range | 统计设备数量 |
其他后端返回不支持统计,不会自动切换到 Elasticsearch。