1、背景
在企业级应用,我们经常需要记录后端用户操作各种功能的日志,方便未来发现业务有问题,能通过用户操作日志追湖全流程。此外,我们还可以通过统计用户操作日志,分析某些功能点击的次数,判斯哪些功能经常使用,那些功能不经常使用其至可以下线通过这种量化的分析,对于产品未来的功能规划也起到指导作用,所以优雅的设计一个后台操作日志功能,对于企业级系统必不可少。
2、应用场景
使用场景
1、规则类变更场景(比如活动配置规则修改)、
2、配置类变更场景(比如公共配置修改)
3、敏感信息类变更场景(比如客户信息修改)
以上场景,如果有变更,通常会对我们系统的业务产生直接的影响,如果人为失误、有可能造成直接的经济损失,所以我们需要记录每一笔操作日志。
设计方案注意点
1、记录后端操作日志必须与业务功能解耦,不能硬编码耦合在一起,增加开发人员的工作量;
2、后端操作日志必须记录管理后台操作的菜单、操作的功能、操作人、操作时间等重要核心的信息;
3、后端操作日志异步入库,不能阻塞主业务流程;
4、后端操作日志重要的信息支持全模糊查询方便管理员快速查询信息,比如:操作内容字段;
3、实现方案
1、底层base公共服务提供日志相关的服务(保存日志、查询日志)
2、通过自定义注解+AOP拦载请求,自动上报日志到base的日志服务
3、通过引入guava的eventbus异步发布事件实现日志的异步入mysql库。
4、考虑到操作内容字段内容比较大,基于canal+kafka,异步将日志表记录同步到es,通过全模糊查询es,可快速查询日志记录。同时考虑到操作日志表比较大,每3个月归档日志表一次,保存mysql日志表查询性能
4、架构设计
后端日志组件架构图