Skip to content

5.14 操作日志 ​

概述

操作日志由中间件异步采集:gmeta log/logType 标签声明记录内容,OperationLog 中间件组装(含脱敏),有界通道 + 单 worker 批量落库,绝不阻塞业务。41 种日志类型固定枚举。

采集链路 ​

text
gmeta log 标签 → 路由元数据(meta 表)→ 中间件组装 OperationLogEntry
  → 有界通道 2048(满则丢弃并计数告警,不阻塞业务)
  → 单 worker 攒批(满 100 条或每 1s flush 一批)
  → LogSink(operation_log 模块 init 注册的落库函数)
  → INSERT goframe_operation_log

记录字段 ​

text
Title=log 标签   Type=logType   Source=0
Method="GET /api/user/page"(路由模板)  RequestMethod/URL=实际请求
Param:GET/DELETE 取 query JSON;写操作优先取 body
       (maskSecret 脱敏 password/oldPassword/newPassword/salt/
         access_token/refresh_token → ***)
Result:响应信封 JSON(截断 8000 字节,UTF-8 边界回退截断)
IP=realClientIP   Location=ip2region   OS/Browser=ua 解析
ConsumeTime=毫秒   Status:响应 code==0 → 0 正常,否则 1 异常(Error=msg)
CreateUser=ctx 用户名

log_type 固定枚举(consts/log_type.go,数值勿改) ​

text
0=自动推断(GET→查询,其余→修改)
1=新增   2=修改   3=删除   4=查询   5=导入   6=导出
7=审批   8=驳回   9=提交   10=撤回  11=关闭  12=开启
13=启用  14=禁用  15=上传  16=下载  17=发送  18=同步
19=代码生成  20=清空  21=还原  22=登录  23=登出  24=重置
25=分配  26=授权  27=执行  28=暂停  29=恢复  30=发布
31=下架  32=复制  33=移动  34=排序  35=锁定  36=解锁
37=归档  38=取消归档  39=绑定  40=解绑  99=其他

gmeta logType 字符串(query/add/update/delete/import/export/reset/…)经 LogTypeMap 转枚举;展示中文经 LogTypeNames(logic 的 LogTypeText)——该字段不走字典(数值与注解绑定,改动破坏存量日志)。

开关与配置 ​

yaml
operationLog:
  enable:   true    # 总开关
  logQuery: true    # 是否记录查询类操作(logType=query)

日志标题约定:{模块中文名}-{动作}(如"用户管理-查询分页记录"),动作映射 page=查询分页记录 / list=查询列表 / detail=查询详情 / add=新增记录 / update=修改记录 / delete=删除记录 / batchDelete=批量删除记录 / import=导入数据 / export=导出数据 / status=设置状态。

查询模块(/api/oper/log) ​

text
仅查询与删除(无增改——日志只能系统写入):
  GET  /api/oper/log/page|list|detail/:id
  DELETE /api/oper/log/delete/:id | /batchDelete
权限:sys:operLog:{page|list|detail|delete|batchDelete}
清理:内置 LogClean 定时任务物理删除超保留期记录(job.logRetentionDays 默认 90 天)

可靠性设计 ​

场景行为
通道满(2048)丢弃该条并计数,每丢 100 条输出一次 Warning——日志绝不阻塞业务
落库失败仅记错误日志,不影响响应
panicResponse 中间件 recover 兜底(日志采集在 defer 后仍执行)
批量节奏满 100 条或 1s flush——峰值下落库延迟 ≤1s

排障 ​

text
日志完全缺失:operationLog.enable=false?LogSink 未注册(启动告警)?
查询类没记录:operationLog.logQuery=false
偶发缺失:通道满丢弃告警(看 Warning 日志);峰值场景可调大通道容量
Param 是 ***:正常——敏感字段脱敏
Result 超长被截:正常——截断 8KB
IP/归属地不对:api.proxyIps 未含反代地址(见受信代理机制)

小蚂蚁云团队 · 提供技术支持