基于SpringAOP优雅实现记录用户操作日志的方法与流程

未命名 10-09 阅读:164 评论:0

基于springaop优雅实现记录用户操作日志的方法
技术领域
1.本发明属于软件开发领域,尤其是涉及一种基于springaop优雅实现记录用户操作日志的方法。


背景技术:

2.现有的对于操作日志记录方案大体分为三种:第一种是前端采集用户操作行为后通过http请求将操作日志发送给后台存储,这导致后台系统压力增大;另外由于前端数据依赖后台服务获取,造成某些需要记录的信息缺失;第二种是在网关层拦截所有后台请求后获取请求方法、请求参数、在token中获取请求所属用户信息等通用信息,但无法针对具体业务进行差异化的信息记录;第三种是服务端记录日志,这种方式灵活性高、信息记录更全面,但在大多数的软件开发方式中,都是在业务逻辑环节进行日志记录,如无统一工具帮助不仅落地难度大且后续变更维护将及其困难。


技术实现要素:

3.有鉴于此,本发明旨在提出一种基于springaop优雅实现记录用户操作日志的方法,以解决各项目团队业务日志统一接入问题,将复杂的日志接入协议剥离出来,使得开发人员更专注于自己业务,降低日志接入难度提高接入效率。
4.为达到上述目的,本发明的技术方案是这样实现的:
5.基于springaop优雅实现记录用户操作日志的方法,基于spring的aop技术实现操作日志中公共信息的统一采集、利用自定义注解实现差异数据收集、利用线程变量在当前线程上下文中传递数据;
6.在请求结束后将采集的数据按照日志平台接入协议进行组装,最后通过kafka将操作日志发送到指定的topic;
7.日志平台接收topic中的数据进行存储完成日志采集工作。
8.进一步的,确定需要进行日志记录的后台接口:对需要记录日志的接口,在方法上使用注解进行标记,以便spring知晓应该对哪些接口请求进行拦截。
9.进一步的,在业务方法执行前执行:
10.利用spring aop的前置通知技术,对上一步中的注解的进行拦截,然后利用反射获取注解中的信息,放入线程变量中;
11.http请求通过网关时,网关将当前登录用户以及客户端ip信息放到header中,在aop的前置通知方法中对这些数据进行采集,放入线程变量中。
12.进一步的,在业务方法中执行:
13.针对某些接口存在个别字段需要在业务中手动采集,提供工具类用于将这些字段放入线程变量中。
14.进一步的,在业务方法执行后执行:
15.利用spring aop的后置通知技术获取controller方法的执行结果和保存日志数
据的线程变量;
16.将线程变量和方法执行结果按照日志平台接入协议进行组装、序列化,通过kfaka将日志数据发送给日志平台进行持久化存储。
17.进一步的,本方案公开了一种电子设备,包括处理器以及与处理器通信连接,且用于存储所述处理器可执行指令的存储器,所述处理器用于执行基于springaop优雅实现记录用户操作日志的方法。
18.进一步的,本方案公开了一种服务器,包括至少一个处理器,以及与所述处理器通信连接的存储器,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,以使所述至少一个处理器执行基于springaop优雅实现记录用户操作日志的方法。
19.进一步的,本方案公开了一种计算机可读取存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现基于springaop优雅实现记录用户操作日志的方法。
20.相对于现有技术,本发明所述的基于springaop优雅实现记录用户操作日志的方法具有以下有益效果:
21.(1)本发明所述的基于springaop优雅实现记录用户操作日志的方法,业务逻辑层无需感知日志平台协议中涉及的公共字段采集、数据的序列化处理以及向kafka的日志topic中发送消息,只需要在controller接口上使用注解标记并指定个别业务字段即可完成整个日志采集与发送过程;
22.(2)本发明所述的基于springaop优雅实现记录用户操作日志的方法,利用了springboot的自动配置原理可以将代码以sdk的形式发布,后期若日志平台需求变更,只需要将日志工具升级后重新推送到私服上,各业务团队将自己项目中依赖的sdk版本号进行升级就完成了所有项目的更新迭代。
附图说明
23.构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
24.图1为本发明实施例所述的基于springaop优雅实现记录用户操作日志的方法示意图。
具体实施方式
25.需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
26.下面将参考附图并结合实施例来详细说明本发明。
27.本方案在具体实施过程中,方案如下:
28.基于springaop优雅实现记录用户操作日志的方法,基于spring的aop技术实现操作日志中公共信息的统一采集、利用自定义注解实现差异数据收集、利用线程变量在当前线程上下文中传递数据;
29.在请求结束后将采集的数据按照日志平台接入协议进行组装,最后通过kafka将操作日志发送到指定的topic;
30.日志平台接收topic中的数据进行存储完成日志采集工作。
31.确定需要进行日志记录的后台接口:对需要记录日志的接口,在方法上使用注解进行标记,以便spring知晓应该对哪些接口请求进行拦截。
32.在业务方法执行前执行:
33.利用spring aop的前置通知技术,对上一步中的注解的进行拦截,然后利用反射获取注解中的信息,放入线程变量中;
34.http请求通过网关时,网关将当前登录用户以及客户端ip信息放到header中,在aop的前置通知方法中对这些数据进行采集,放入线程变量中。
35.在业务方法中执行:
36.针对某些接口存在个别字段需要在业务中手动采集,提供工具类用于将这些字段放入线程变量中。
37.在业务方法执行后执行:
38.利用spring aop的后置通知技术获取controller方法的执行结果和保存日志数据的线程变量;
39.将线程变量和方法执行结果按照日志平台接入协议进行组装、序列化,通过kfaka将日志数据发送给日志平台进行持久化存储。
40.在具体实施过程中,还可以通过下述方式实现:
41.基于spring的aop技术实现操作日志中公共信息的统一采集:
42.步骤1.1:定义切面。在spring中,通过使用@aspect注解定义一个切面类,这个切面类用于包含前置、后置、环绕等通知方法。
43.步骤1.2:定义前置通知方法。在切面类中,通过使用@before注解定义一个前置通知,这个通知方法将在目标方法执行前被调用。
44.步骤1.3:在前置通知方法中,通过使用joinpoint对象,获取到目标方法的信息,并进行统一采集。
45.利用自定义注解实现差异数据收集:
46.步骤2.1:定义自定义注解。通过使用java的注解机制,定义一个自定义注解,用于标识需要收集差异数据的方法。
47.步骤2.2:在自定义注解中,定义一些用于收集差异数据的属性,比如操作类型、操作描述等。
48.步骤2.3:在切面类的前置通知方法中,通过反射获取到目标方法上的自定义注解,并收集差异数据。
49.利用线程变量在当前线程上下文中传递数据:
50.步骤3.1:在切面类中,定义一个threadlocal变量,用于在当前线程上下文中存储和传递数据。
51.步骤3.2:在前置通知方法中,将收集到的数据存储到threadlocal变量中。
52.步骤3.3:在后置通知方法中,从threadlocal变量中获取数据,并进行后续的处理。
53.在请求结束后将采集的数据按照日志平台接入协议进行组装,最后通过kafka将操作日志发送到指定的topic:
54.步骤4.1:在后置通知方法中,将从threadlocal变量中获取的数据,按照日志平台接入协议进行组装。
55.步骤4.2:通过使用kafkaproducer对象,将组装好的操作日志发送到指定的kafka topic。
56.日志平台接收topic中的数据进行存储完成日志采集工作:
57.步骤5.1:日志平台通过使用kafkaconsumer对象,消费指定的kafka topic中的数据。
58.步骤5.2:将消费到的数据,进行解析并存储到日志存储系统中,完成日志采集工作。
59.本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及方法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
60.在本技术所提供的几个实施例中,应该理解到,所揭露的方法和系统,可以通过其它的方式实现。例如,以上所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。上述单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
61.最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。
62.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

技术特征:
1.基于springaop优雅实现记录用户操作日志的方法,其特征在于:基于spring的aop技术实现操作日志中公共信息的统一采集、利用自定义注解实现差异数据收集、利用线程变量在当前线程上下文中传递数据;在请求结束后将采集的数据按照日志平台接入协议进行组装,最后通过kafka将操作日志发送到指定的topic;日志平台接收topic中的数据进行存储完成日志采集工作。2.根据权利要求1所述的基于springaop优雅实现记录用户操作日志的方法,其特征在于,确定需要进行日志记录的后台接口:对需要记录日志的接口,在方法上使用注解进行标记,以便spring知晓应该对哪些接口请求进行拦截。3.根据权利要求1所述的基于springaop优雅实现记录用户操作日志的方法,其特征在于,在业务方法执行前执行:利用spring aop的前置通知技术,对上一步中的注解的进行拦截,然后利用反射获取注解中的信息,放入线程变量中;http请求通过网关时,网关将当前登录用户以及客户端ip信息放到header中,在aop的前置通知方法中对这些数据进行采集,放入线程变量中。4.根据权利要求1所述的基于springaop优雅实现记录用户操作日志的方法,其特征在于,在业务方法中执行:针对某些接口存在个别字段需要在业务中手动采集,提供工具类用于将这些字段放入线程变量中。5.根据权利要求1所述的基于springaop优雅实现记录用户操作日志的方法,其特征在于,在业务方法执行后执行:利用spring aop的后置通知技术获取controller方法的执行结果和保存日志数据的线程变量;将线程变量和方法执行结果按照日志平台接入协议进行组装、序列化,通过kfaka将日志数据发送给日志平台进行持久化存储。6.一种电子设备,包括处理器以及与处理器通信连接,且用于存储所述处理器可执行指令的存储器,其特征在于:所述处理器用于执行上述权利要求1-5任一所述的基于springaop优雅实现记录用户操作日志的方法。7.一种服务器,其特征在于:包括至少一个处理器,以及与所述处理器通信连接的存储器,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,以使所述至少一个处理器执行如权利要求1-5任一所述的基于springaop优雅实现记录用户操作日志的方法。8.一种计算机可读取存储介质,存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现权利要求1-5任一项所述的基于springaop优雅实现记录用户操作日志的方法。

技术总结
本发明提供了一种基于SpringAOP优雅实现记录用户操作日志的方法,基于Spring的Aop技术实现操作日志中公共信息的统一采集、利用自定义注解实现差异数据收集、利用线程变量在当前线程上下文中传递数据;在请求结束后将采集的数据按照日志平台接入协议进行组装,最后通过kafka将操作日志发送到指定的topic;日志平台接收topic中的数据进行存储完成日志采集工作。本发明有益效果:基于SpringAOP优雅实现记录用户操作日志的方法,业务逻辑层无需感知日志平台协议中涉及的公共字段采集、数据的序列化处理以及向kafka的日志topic中发送消息,只需要在Controller接口上使用注解标记并指定个别业务字段即可完成整个日志采集与发送过程。程。程。


技术研发人员:李洋
受保护的技术使用者:紫光云技术有限公司
技术研发日:2023.06.30
技术公布日:2023/10/7
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐