关于系统记录用户操作日志及对象变更问题

减肥啊啊啊啊啊 2017-05-23 05:27:57
加精
项目jdk7.0 架构是s1s3h3 二次开发

日志的需求是这样的 记录每个用户操作ip啦、用户名啦、访问url啦。执行方法啦、执行入参啦、返回值啦、是否执行成功啦、抛出异常记录啦、对象变更记录(如:对象person属性name变更前a变更后b)。

分解需求就是一个用户操作日志记录 和一个对象变更前后记录(相同的类及属性不同值记录)

刚听到需求觉得很简单,一开始想的方案是用spring aop + 自定义注解着手解决用户操作日志
对象变更开始想的是 object2json 然后jsonObject比对key的值 如果实在不行就反射

于是开始找资料,对象变更的发现github上有2个不错的对象比较项目
javers java object diff
demo测试后发现不错,于是开始整合测试,发现我们的实体是复杂多继承循环引用而且还是打包class不能改源码。

比如人员类 里面还有人员 相当于循环引用了

class Person{
String name;
int age;
Person father;
}

fastjson object转json都不行了加了DisableCircularReferenceDetect没办法加忽略注解而且整个项目中那么多的实体也不知道哪些是有循环引用的,后来放弃了,弄成反射的,可是实体里的一些实体没办法判断属性变更,多层级的问题


后来写好一版拿给经理看说不让拿spring aop做。。。。。让我去github上找找其他日志框架。。。。无语。。。。

我的问题是大家的项目系统中关于用户操作日志记录的解决方案 这块是拦截器还是aop还是其他的解决方案,
另外在复杂对象的变更比对上有解决方案吗?

或者有其他更好的建议吗?

ps:现在是没有解决方案的办法了,浪费了3天,stackoverflow英文很头疼 搜索关键字都很少 operation log? audit log?
github上也没有这块操作日志的框架项目,

先谢谢各位了!~


...全文
11879 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
架构师易哥 2019-07-05
  • 打赏
  • 举报
回复
直接使用这个开源框架就可以了: ObjectLogger,地址为 https://github.com/yeecode/ObjectLogger 有中文说明 它能够自动分析对象的属性变化记录到日志系统中,并且提供日志存储、jar包等的支持。 能做到下面的实现效果:
  • 打赏
  • 举报
回复
json 使用了fastjson 实现PropertyFilter的apply方法进行判断哪些属性要序列化哪些不要。 全局的exclude 和include 和特殊模块的字段等结合序列化json的
  • 打赏
  • 举报
回复
过了这么久,解决方案拦截处无非就是类似方法级别拦截 类似spring aop + 自定义注解的配置 对象的变更比对是使用了前段工具jsondiffpatch 用来比对2个json数据内容jsondiffpatch 我们复杂的内容对象进行了filter过滤属性 循环引用的去除(而且大部分属于人员的循环引用)。
清汤泡饭 2017-08-13
  • 打赏
  • 举报
回复
打个日志,不是什么特别的。和经理沟通下,他理想的是什么样的。
洛鸣生 2017-07-11
  • 打赏
  • 举报
回复
极端方案,继承重写,用到的类继承下来,重新封装
chenshuang_com 2017-06-23
  • 打赏
  • 举报
回复
我也遇到这样的需求,我用的就是springaop做用户操作日志 记录的
河岸飞流 2017-06-22
  • 打赏
  • 举报
回复
spring aop 挺好的啊 为什么不让用
winner2050 2017-06-20
  • 打赏
  • 举报
回复
这都什么狗屁经理,自己不会就让下面的人弄框架。
jeck5000 2017-06-16
  • 打赏
  • 举报
回复
记录对象前后变更,我用的反射,再比较是否相等
ljheee 2017-05-29
  • 打赏
  • 举报
回复
JSONException: There is a cycle in the hierarchy! JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); JSONObject json = JSONObject.fromObject(object, jsonConfig);
且活且珍惜 2017-05-26
  • 打赏
  • 举报
回复
没思路,不过明显感觉需求有点怪,即时这个数据存进数据库了,怎么方便查询呢?是只给修改模块做日志?如果日志是给程序员使用的话,完全存2个字符串,用的时候对比一下就可以了。
hugh_z 2017-05-25
  • 打赏
  • 举报
回复
66666666666666666
wula0010 2017-05-25
  • 打赏
  • 举报
回复
实体是复杂多继承循环引用,这个转json可以考虑用json-lib-2.2.3-jdk1.5.jar包,不知道有没有支持jdk7的jar包...............
淡悸优伤 2017-05-25
  • 打赏
  • 举报
回复
虽然不太懂 但是顶一下
zhujinqiang 2017-05-25
  • 打赏
  • 举报
回复
spring aop + 自定义注解有什么不当之处? 和你的经理沟通下问问具体原因
cattpon 2017-05-25
  • 打赏
  • 举报
回复
learning~
「已注销」 2017-05-25
  • 打赏
  • 举报
回复
web层不就那些拦截方式吗?所有的拦截都是aop啊,不用aop用什么?filter、listener不都一样
  • 打赏
  • 举报
回复
引用 13 楼 wula0010 的回复:
实体是复杂多继承循环引用,这个转json可以考虑用json-lib-2.2.3-jdk1.5.jar包,不知道有没有支持jdk7的jar包...............
我尝试过了 json lib 配置jsonconfig后过滤掉一些属性还是会报死循环的net.sf.json.JSONException: There is a cycle in the hierarchy! 不知道有没有根据类过滤属性,fastjson会好一些 重写过滤配置 现在就是不知道哪些类的哪些属性有循环引用,有点深的继承,全找齐特别费时了 还是感谢你的建议
小白619 2017-05-25
  • 打赏
  • 举报
回复
也顺道学习一下
xiaohanzo 2017-05-24
  • 打赏
  • 举报
回复
那就是前台监听,后台写数据库
加载更多回复(7)

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧