操作日志几乎存在于每个系统中,而这些系统都有记录操作日志的一套 API。操作日志和系统日志不一样,操作日志必须要做到简单易懂。所以如何让操作日志不跟业务逻辑耦合,如何让操作日志的内容易于理解,如何让操作日志的接入更加简单?上面这些都是本文要回答的问题。本文是项目实战的第一讲:我们将围绕着如何“优雅”地记录操作日志展开描述。
文章目录
-
-
- 1、项目背景
- 2、项目职责
- 3、主要技术
- 4、项目实现
-
- 4.1、技术上可选方案
- 4.2、整体流程
-
- 4.2.1、操作日志读接口
- 4.2.2、操作日志写接口
- 4.2.3、操作日志整体代码逻辑
- 4.2.3、日志模块问题记录
- 问题1、如何优雅地查看操作日志?
- 问题2、需要跟旧数据比对得出多个修改记录,该如何优雅的搞定?(==支持字段级别对比==)
- 问题 3、有什么办法保证和主线程的上下文继承,除了手动传参这种侵入性太强的方法以外?
- 问题4、消息的全链路追踪?
- Action1:在这个项目中的收获?
- Action2:可以优化的地方?
- Action3:为什么使用AOP记录操作日志,而不是其他方案?
- Action4、对于实例类目勾选太多的场景
- Action5、日志落库的逻辑处理
- Action6、为什么将某些切入点放置在service层?
- 4.3、与业界方案的比对
- 4.4、技术迭代优化
- 5、项目结果
-
1、项目背景
项目背景:给标准中心项目,类目模块增加操作日志,在配置在出现问题时,方便追溯原因
面临的挑战
①数据量大
- 做好异步限流处理
②业务复杂
- 使用策略模式制定策略
2、项目职责
- ①使用切面编程,定义好切面注解,记录当前业务类型,并对DAO层接口加上切入点注解,执行后续业务操作;
- ②为了防止后发的消息先消费,导致日志记录乱序,使用了顺序消息发送变更信息;
- ③负责业务变更时,涉及多字段diff,新旧数据比对得出多个修改记录;
- ④使用Apollo配置控制切面开关是否打开
3、主要技术
SSM+Maven+Springboot(2.0.3.RELEASE)+Git+Dubbo+RocketMQ+Redis+Apollo+MQ
- ①主要用mav