请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于日志系统

老是您好,关于日志系统的搭建想请教一下:
场景:
记录什么人什么时间做了什么事情(增、删、改),用于审计
假如用户删了一条数据,我需要记录用户删掉的是哪条数据的具体内容,
假如用户修改了一条数据,我需要知道用户修改了哪些属性
这个做起来比较麻烦
其实就是要知道什么人时间做了什么事情包括操作的目标对象

什么人好做,我解析token获取userID,放在线程变量中,用的时候记录时间取就可以了,
但是操作对象比较难搞

删除一条数据,接口可能只会传一个唯一ID标识,根据ID就把数据删了,想知道删的具体事哪条数据,就不好弄了,这里可以做逻辑删除假删除,也可以建一张history表,在数据库写触发器,在删除的时候,在历史表中插入该条数据的历史记录
这两种方式,第一种,需要给所有表加上isDelete字段,用于标识这条数据是否被逻辑删除,也会影响到所有的查询语句,需要带上isDelete这个条件,第二种方式,需要给每张表都加上增删改的触发器,表多了触发器也很多,而且触发器也会影响系统系统,很麻烦

再或者,针对mapper做AOP,删之前先把删除的内容查出来,保存起来,修改之前先把原来的对象查出来记录,但是这种方式也觉得不好

有些零碎,这是我的想法,想请教老师这一块的功能,有没有比较好的方案,或者开源的框架可以实现
谢谢!

正在回答 回答被采纳积分+3

1回答

大目 2020-07-06 00:04:15

就我个人的经验来看,这个还是挺难搞成通用的,我个人的做法是在业务中去记录日志。

甚至都不是AOP的……

1 回复 有任何疑惑可以回复我~
  • 提问者 zuo2020 #1
    好的
    谢谢老师回复,
    我现在是这么做的:
    首先创建日志表 记录操作人ID 时间 内容类型 操作类型 操作对象的json 等
    
    一般一条数据在日志表中 会有创建、修改(可能多条)、删除这几种状态按照时间排序,通过这些就可以追溯一条数据的生命周期
    只要这条数据是通过接口创建的,那就可以找到它的所有记录,如果是导入的,找到导入源文件也没问题。
    
    因为我业务是基于元数据来做维护的,大概百来张表,存在元数据表中,用表来维护这些表
    
    对于这些业务的基本增删改 一套接口就完成了
    我只要在这套接口方法上加我定义的注解,然后通过消息,可以完成日志的异步记录
    
    我的系统还有用户模块,不是基于元数据来做的,这部分内容也要纳入审计范围
    
    所以这个模块给每个增删改的方法上加了注解,并且自定义注解参数,获取需要的日志字段
    最后也通过消息的方式完成日志的记录
    因为我的数据量不会太大,所以我把所有的操作日志放在了一张表里
    请问老师,这样的方案 有没有明显的缺陷或者优化的地方
    回复 有任何疑惑可以回复我~ 2020-07-07 11:21:47
  • 大目 #2
    不知道哎,个人感觉没有哈,能满足业务要求就OK啦
    回复 有任何疑惑可以回复我~ 2020-07-07 21:54:28
  • elinor_0 回复 提问者 zuo2020 #3
    你好,互相交流一下,Mybatis-Plus里面有几个插件应该可以满足这个需求,比如逻辑删除插件,增删查改的拦截增强插件,可以在删除、更新时记录对应的field
    回复 有任何疑惑可以回复我~ 2022-01-05 11:33:56
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号