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

2019-07-29 16:28:19 +08:00
 fanmouji
如: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 ”);
硬编码要改太多了,想问问大家有没有低入侵,注解的方法实现,谢谢!
3287 次点击
所在节点    程序员
10 条回复
msaionyc
2019-07-29 16:31:11 +08:00
Spring AOP,对特定的方法名进行拦截,通过获取参数就可以判断这些了
直接注解就可以用,就一个类
sesmond
2019-07-29 16:31:57 +08:00
这不很容易么,要在 service 层拦截直接加注解然后更新前查询出来比较下。
要在 dao 层拦截那如果 mybatis 的话就用 mybatis 拦截器直接控制。
取用户也直接用 HttpServiletRequest 取出来
gz911122
2019-07-29 16:32:09 +08:00
数据库抽象出个服务对外提供修改

不直接修改数据库

服务修改数据库的时候记录修改内容和调用方
stevenkang
2019-07-29 17:01:18 +08:00
@PrePersist
void prePersist() {
log.save(this)
}
ourslay
2019-07-29 18:34:31 +08:00
MDC 了解下?
StevenTong
2019-07-29 18:49:00 +08:00
前后对象都转成 json 然后用 jsondiff 库判断一下变更?
chocotan
2019-07-29 21:03:45 +08:00
JaVers — Object auditing and diff framework for Java
https://javers.org
linuxsteam
2019-07-30 06:11:43 +08:00
我用反射写过 aop 没用过 我遇到的问题就是很二的用 if 处理 string 转成 bigdecmal 的转换
linuxsteam
2019-07-30 06:18:06 +08:00
@chocotan 大佬的回复 符合要求 有没有中文相关例子啊 百度发现例子太少了
razertory
2019-07-30 13:57:16 +08:00
我之前的做法是,在 API 层设置了两个切入点。分别在调用 service 之前和之后都获取当时的系统快照,随后异步处理两个快照产生日志

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/587208

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX