总结 Mybatis Plus轻松实现数据库变更全局审计日志
引言
在日常的业务开发中,监控与记录数据库的变化是非常必要的操作,特别是当出现数据异常时,我们可以通过审计日志追溯数据变化的具体情况。Mybatis Plus作为一款优秀的持久层框架,其强大的功能可以轻松帮助我们实现全局审计日志。接下来,我将向大家介绍如何利用Mybatis Plus实现数据库变更的全局审计日志。
实现审计日志
首先,我们这里说的审计日志,主要包括审计需要的四大元素包括操作用户、操作时间、操作类型以及操作前后的数据对比,本文主要基于这个要求进行实现,实现效果如下图所示:
接下来介绍具体实现步骤:
1.创建审计日志表
首先,我们需要创建一个审计日志数据库表用于存储日志记录,商品表用于测试变更操作。这个表需要包含用户ID、操作时间、请求ID、操作表名称、变更前,变更后,具体变更内容,操作人员等字段。以下是SQL语句:
create table `audit-log`
(
id bigint not null comment '主键' primary key,
`request_id` varchar(50) not null comment '请求ID',
`data_change` varchar(1000) null comment '变更项',
`before_value` varchar(1000) null comment '对象变更前json',
`after_value` varchar(1000) null comment '对象变更后json',
`table_name` varchar(50) null comment '变更表名',
`create_time` datetime null comment '变更时间',
`user_id` bigint null comment '操作人员'
-- 可以适当冗余相关用户名,机构ID,机构名称等。
)
charset = utf8mb4;
create table goods
(
id bigint not null
primary key,
name varchar(100) not null,
price decimal(18, 2) not null,
description varchar(255) null,
brand varchar(100) not null,
image_url varchar(255) not null,
create_time datetime not null,
update_time datetime not null
)
charset = utf8mb4;
2.创建AuditLogAspect用于记录请求日志
这里我们需要创建一个AOP,用于在指定的包或注解进行拦截,执行前和执行后记录相应的数据,用于构造审计日志,如下代码有详细注释:
@Aspect
@Component
public class AuditLogAspect { Logger logger = LoggerFactory.getLogger(AuditLogAspect.class);
@Autowired
private ThreadAuditService threadAuditService;
private static void accept(DomainChangeAction change) { List> oldObject = change.getOldObject();
if (CollectionUtils.isEmpty(oldObject)) { return;
}
List
4. 保存审计日志
通过全局操作监听和AOP技术,取得了审计日志所需要的相关内容,然后在AOP的执行完成后增加记录审计日志的相关内容,可以直接调用相关方法,将审计日志保存到数据库,也可以将审计日志放入MQ,然后通过消费消息异步将审计日志入库保存,建议使用MQ异步的方式,这样做尽可能的降低审计日志的记录对业务系统性能的影响。
需要详细代码,请关注VX公.众.号:“字节跑动”, 发送"审计日志"获取源码工程。
总结
使用Mybatis Plus实现全局的审计日志并不难,本章以更新操作为例,详细说明的实现步骤,有了审计日志,我们就能非常方便地追踪每一条数据的变化过程。希望这篇文章能对您有所帮助。