Java面试要点:操作日志、数据变更日志、敏感操作追踪与归档
前言
审计日志用于回答“谁在什么时候做了什么,影响了哪些数据”。企业系统尤其是后台、金融、运维平台都需要它。
日志分类
| 类型 | 示例 |
|---|---|
| 登录日志 | 登录、登出、失败原因 |
| 操作日志 | 新增、修改、删除、审批 |
| 数据变更日志 | 修改前后值 |
| 安全日志 | 敏感操作、越权拦截 |
| 系统日志 | 异常、接口耗时 |
操作日志怎么采集
常见方式:
- AOP 注解。
- 拦截器。
- 业务代码显式记录。
- binlog 解析。
AOP 适合通用记录,业务显式记录适合复杂语义。
flowchart TD
A[用户操作] --> B[业务服务]
B --> C[写业务数据]
B --> D[发送审计事件]
D --> E[审计日志服务]
E --> F[日志库/ES]
修改前后值
数据变更审计要记录:
- 表名或业务对象。
- 主键。
- 修改前。
- 修改后。
- 操作人。
- 操作时间。
敏感字段要脱敏,例如手机号、身份证、银行卡。
同步还是异步
同步写日志:
- 简单。
- 但影响主流程。
异步写日志:
- 不阻塞业务。
- 但要防丢失。
重要审计日志建议通过可靠消息或本地事件表落地。
查询和归档
审计日志增长很快,需要:
- 分区。
- 索引。
- 冷热分离。
- 归档。
- 保留周期。
查询常见维度:
- 操作人。
- 时间范围。
- 业务单号。
- 操作类型。
高频面试题
为什么普通日志不能替代审计日志?
普通日志偏排查问题,审计日志偏合规和追责,需要结构化、可查询、不可随意删除。
AOP 记录日志有什么问题?
只能记录通用信息,复杂业务语义和修改前后值往往还要业务代码配合。
审计日志可以异步吗?
可以,但重要日志要保证可靠投递和失败补偿。
敏感字段怎么处理?
存储和展示都要脱敏,必要时加密,并控制查询权限。
总结
审计日志的重点是结构化、可追溯、可查询、可归档、可脱敏。企业里审计不是为了开发看日志,而是为了安全、合规和责任追踪。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Junly博客!
评论


