前言

审计日志用于回答“谁在什么时候做了什么,影响了哪些数据”。企业系统尤其是后台、金融、运维平台都需要它。

日志分类

类型 示例
登录日志 登录、登出、失败原因
操作日志 新增、修改、删除、审批
数据变更日志 修改前后值
安全日志 敏感操作、越权拦截
系统日志 异常、接口耗时

操作日志怎么采集

常见方式:

  • AOP 注解。
  • 拦截器。
  • 业务代码显式记录。
  • binlog 解析。

AOP 适合通用记录,业务显式记录适合复杂语义。

flowchart TD
    A[用户操作] --> B[业务服务]
    B --> C[写业务数据]
    B --> D[发送审计事件]
    D --> E[审计日志服务]
    E --> F[日志库/ES]

修改前后值

数据变更审计要记录:

  • 表名或业务对象。
  • 主键。
  • 修改前。
  • 修改后。
  • 操作人。
  • 操作时间。

敏感字段要脱敏,例如手机号、身份证、银行卡。

同步还是异步

同步写日志:

  • 简单。
  • 但影响主流程。

异步写日志:

  • 不阻塞业务。
  • 但要防丢失。

重要审计日志建议通过可靠消息或本地事件表落地。

查询和归档

审计日志增长很快,需要:

  • 分区。
  • 索引。
  • 冷热分离。
  • 归档。
  • 保留周期。

查询常见维度:

  • 操作人。
  • 时间范围。
  • 业务单号。
  • 操作类型。

高频面试题

为什么普通日志不能替代审计日志?

普通日志偏排查问题,审计日志偏合规和追责,需要结构化、可查询、不可随意删除。

AOP 记录日志有什么问题?

只能记录通用信息,复杂业务语义和修改前后值往往还要业务代码配合。

审计日志可以异步吗?

可以,但重要日志要保证可靠投递和失败补偿。

敏感字段怎么处理?

存储和展示都要脱敏,必要时加密,并控制查询权限。

总结

审计日志的重点是结构化、可追溯、可查询、可归档、可脱敏。企业里审计不是为了开发看日志,而是为了安全、合规和责任追踪。