V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fanmouji
V2EX  ›  程序员

Java 做一个记录修改日志功能,大家有什么好的方法推荐吗

  •  
  •   fanmouji · 2019-07-29 16:28:19 +08:00 via iPhone · 3085 次点击
    这是一个创建于 1723 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如:bean 有 name,age 两个属性,原记录值是 name:a,age:20,有人修改成了 name:b,age:21,系统要记录何人何时何地做了什么修改(“管理员,07-29 15:00,ip:1.1.1.1 ”修改内容:“ name:a->b,age:20->21 ”);
    硬编码要改太多了,想问问大家有没有低入侵,注解的方法实现,谢谢!
    10 条回复    2019-07-30 13:57:16 +08:00
    msaionyc
        1
    msaionyc  
       2019-07-29 16:31:11 +08:00   ❤️ 1
    Spring AOP,对特定的方法名进行拦截,通过获取参数就可以判断这些了
    直接注解就可以用,就一个类
    sesmond
        2
    sesmond  
       2019-07-29 16:31:57 +08:00   ❤️ 1
    这不很容易么,要在 service 层拦截直接加注解然后更新前查询出来比较下。
    要在 dao 层拦截那如果 mybatis 的话就用 mybatis 拦截器直接控制。
    取用户也直接用 HttpServiletRequest 取出来
    gz911122
        3
    gz911122  
       2019-07-29 16:32:09 +08:00   ❤️ 1
    数据库抽象出个服务对外提供修改

    不直接修改数据库

    服务修改数据库的时候记录修改内容和调用方
    stevenkang
        4
    stevenkang  
       2019-07-29 17:01:18 +08:00   ❤️ 1
    @PrePersist
    void prePersist() {
    log.save(this)
    }
    ourslay
        5
    ourslay  
       2019-07-29 18:34:31 +08:00   ❤️ 1
    MDC 了解下?
    StevenTong
        6
    StevenTong  
       2019-07-29 18:49:00 +08:00   ❤️ 1
    前后对象都转成 json 然后用 jsondiff 库判断一下变更?
    chocotan
        7
    chocotan  
       2019-07-29 21:03:45 +08:00   ❤️ 5
    JaVers — Object auditing and diff framework for Java
    https://javers.org
    linuxsteam
        8
    linuxsteam  
       2019-07-30 06:11:43 +08:00 via Android
    我用反射写过 aop 没用过 我遇到的问题就是很二的用 if 处理 string 转成 bigdecmal 的转换
    linuxsteam
        9
    linuxsteam  
       2019-07-30 06:18:06 +08:00 via Android
    @chocotan 大佬的回复 符合要求 有没有中文相关例子啊 百度发现例子太少了
    razertory
        10
    razertory  
       2019-07-30 13:57:16 +08:00
    我之前的做法是,在 API 层设置了两个切入点。分别在调用 service 之前和之后都获取当时的系统快照,随后异步处理两个快照产生日志
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2538 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 16:07 · PVG 00:07 · LAX 09:07 · JFK 12:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.