Skip to content

日志与审计 ​

概述 ​

系统管理提供两类核心审计日志,用于全程追踪「谁、在何时、做了什么、结果如何」,是安全合规与故障排查的关键依据:

  • 登录日志:记录每一次登录、退出、注册、令牌刷新等认证行为,聚焦账号安全。
  • 操作日志:自动记录业务接口的调用过程,覆盖请求参数、响应结果与耗时,聚焦操作留痕。

两类日志均落地在 module_system 的 log 模块,分别存储于 system_login_log 与 system_operate_log 两张表。

登录日志 ​

image-20260930141922626

记录时机 ​

登录日志在认证链路中由 _write_login_log 同步写入,覆盖以下场景(对应 LoginLogType):

  • 账号登录、社交登录、短信登录
  • 用户注册、刷新令牌(Token Refresh)
  • 主动退出、强制退出

无论登录成功或失败都会留痕。例如账号或密码错误、验证码不正确、用户被禁用等异常场景,都会独立记录一条失败日志,便于发现暴力破解或异常登录。

日志内容 ​

每条登录日志包含:账号、登录类型、登录结果、用户 IP、浏览器 UA,以及由 UA 解析出的操作系统与浏览器名称,并带有链路追踪编号 trace_id 便于与网关/后端链路关联。

登录结果(LoginLogResult)以枚举值存储,常见取值:

结果值含义
0成功
10账号或密码不正确
20用户被禁用
30 / 31验证码不存在 / 不正确
100未知异常

前端页面 ​

路径:系统管理 → 日志管理 → 登录日志(apps/web-ele/src/views/system/loginlog)。

页面以表格形式展示登录时间、账号、IP、登录结果、操作系统、浏览器,支持按账号、IP、结果筛选,并提供详情弹窗查看完整 UA 信息,以及一键导出 Excel。

操作日志 ​

image-20260930142144815

自动记录机制 ​

操作日志无需在业务代码中手动埋点,而是通过自定义路由类 OperationLogRoute 统一拦截。凡是声明了 route_class=OperationLogRoute 的 APIRouter,其命中的请求都会在响应返回后,由后台任务异步写入操作日志。系统绝大多数业务接口(系统管理、基础设施、工作流、AI 等模块)均已启用该路由。

记录过程会顺带完成以下智能解析:

  • 操作名(sub_type):取自路由的 summary,如「修改部门」。
  • 操作内容(action):在动作基础上自动补充业务对象名称,如「修改部门【研发部】」。
  • 业务编号(biz_id):依次从路径参数、查询参数、请求体、表单中提取主键,批量操作取首个。
  • 处理时间(process_time):接口实际耗时,精确到秒。

敏感信息脱敏 ​

出于安全考虑,写入的请求体与响应体都会经过脱敏处理。命中敏感字段名的键值会被统一替换为 ***,兼容小驼峰(oldPassword)与蛇形(old_password)两种写法。可脱敏字段通过配置 OPERATION_LOG_SENSITIVE_FIELDS 定义,默认包含 password、token、accessToken、authorization、secret 等。若请求体过长(超过 2000 字符)则仅记录「请求参数过长」提示,避免日志膨胀。

记录范围 ​

通过配置项控制是否记录以及记录哪些请求方法:

  • OPERATION_LOG_RECORD:总开关,默认 True。
  • OPERATION_RECORD_METHOD:需要记录的方法集合,默认包含 POST / PUT / PATCH / DELETE / HEAD / OPTIONS(即只记录写操作,不记录普通查询 GET)。

当配置关闭或请求方法不在范围内时,路由直接放行,不产生任何日志开销。

查询与导出 ​

登录日志与操作日志均提供一致的查询能力:

  • 分页查询:GET /login-log/page、GET /operate-log/page,支持按账号、IP、操作模块、请求方式、成功/失败等条件过滤。
  • 详情查看:GET /login-log/get、GET /operate-log/get。
  • 导出 Excel:GET /login-log/export-excel、GET /operate-log/export-excel,导出时枚举值(如结果、类型)会转换为中文文案。

操作日志在返回时会自动关联用户表,补全操作人昵称(无昵称时回退账号),方便审计人员直接识别责任人。

日志清理 ​

操作日志与登录日志会持续增长,系统提供周期性清理能力:

  • 清理逻辑位于 OperationLogService.cleanup_operation_log,按创建时间删除早于保留天数的数据。
  • 保留天数读取系统配置 operation_log_retention_days,默认 90 天;该配置可在「基础设施 → 参数配置」中调整。
  • 通常由「基础设施 → 定时任务」中的调度任务定期触发执行。

清理为物理删除,请结合合规要求谨慎设置保留天数,必要时可先导出归档再执行清理。