跳转到正文

日志查询

日志查询使用公共 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

可选值为 MONGODBELASTICCLICKHOUSERDBMS,兼容小写。配置只影响查询来源,不改变日志保存目标。

同时引入数据库和文件后端时,只在已装配的数据库 Provider 中选择。不能将 FILE_JSONFILE_CSVFILE_RDBMS 配置为查询来源;直接查看 JSON Lines 文件见 JSON 文件存储

指定后端未装配、缺少后端或存在多个候选实现时,查询会报错。仅保存日志的应用不需要配置查询来源。

3. 调用接口

管理端前缀为 /api/admin/system/log;用户端为 /api/app/system/log。外层响应统一为 ResultModel,公共字段与成功标识的边界见 Base 响应约定

方法与路径入参返回的业务数据
POST /pageSystemLogQuery JSONPageModel<SystemLogVo>
GET /{id}字符串日志 IDSystemLogVo 或空
GET /trace/{traceId}链路 ID范围内最新一条 SystemLogVo

例如,分页查看成功日志:

http
POST /api/admin/system/log/page
Content-Type: application/json

{
  "page": 1,
  "rows": 20,
  "status": 1
}

查询条件

条件字段示例
分页pagerows
用户与来源userIduserNameclientip
操作moduleNameoperationNamemethodNamerequestUrl
响应codemessagestatus
链路traceId
时间requestTimeStartrequestTimeEndstartTimeendTime

code 表示业务响应码,操作编码对应 methodName。各后端保留自己的过滤语义,不支持的非空条件会被拒绝;startTime/endTime 可用于 ClickHouse 和 Elasticsearch,searchAfter 用于 Elasticsearch 深分页。

返回字段

字段含义
id存储记录 ID,统一返回字符串
code / message业务响应码与消息
methodName操作编码或方法签名
status0 未知、1 成功、2 失败
requestTime / responseTimeAsia/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。