• 请不要在回答技术问题时复制粘贴 AI 生成的内容
fanmouji
V2EX  ›  程序员

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

  •  
  •   fanmouji · Jul 29, 2019 via iPhone · 4456 views
    This topic created in 2659 days ago, the information mentioned may be changed or developed.
    如: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 replies  •  2019-07-30 13:57:16 +08:00
    msaionyc
    msaionyc
    Jul 29, 2019❤️1
    1
    Spring AOP,对特定的方法名进行拦截,通过获取参数就可以判断这些了
    直接注解就可以用,就一个类
    sesmond
    sesmond
    Jul 29, 2019❤️1
    2
    这不很容易么,要在 service 层拦截直接加注解然后更新前查询出来比较下。
    要在 dao 层拦截那如果 mybatis 的话就用 mybatis 拦截器直接控制。
    取用户也直接用 HttpServiletRequest 取出来
    gz911122
    gz911122
    Jul 29, 2019❤️1
    3
    数据库抽象出个服务对外提供修改

    不直接修改数据库

    服务修改数据库的时候记录修改内容和调用方
    stevenkang
    stevenkang
    Jul 29, 2019❤️1
    4
    @PrePersist
    void prePersist() {
    log.save(this)
    }
    ourslay
    ourslay
    Jul 29, 2019❤️1
    5
    MDC 了解下?
    StevenTong
    StevenTong
    Jul 29, 2019❤️1
    6
    前后对象都转成 json 然后用 jsondiff 库判断一下变更?
    chocotan
    chocotan
    Jul 29, 2019❤️5
    7
    JaVers — Object auditing and diff framework for Java
    https://javers.org
    linuxsteam
    linuxsteam
    Jul 30, 2019 via Android
    8
    我用反射写过 aop 没用过 我遇到的问题就是很二的用 if 处理 string 转成 bigdecmal 的转换
    linuxsteam
    linuxsteam
    Jul 30, 2019 via Android
    9
    @chocotan 大佬的回复 符合要求 有没有中文相关例子啊 百度发现例子太少了
    razertory
    razertory
    Jul 30, 2019
    10
    我之前的做法是,在 API 层设置了两个切入点。分别在调用 service 之前和之后都获取当时的系统快照,随后异步处理两个快照产生日志
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1656 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 13:21 · PVG 21:21 · LAX 05:21 · JFK 08:21
    ♥ Do have faith in what you're doing.