System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种高效的保存api接口调用日志的方法技术_技高网

一种高效的保存api接口调用日志的方法技术

技术编号:40441798 阅读:7 留言:0更新日期:2024-02-22 23:04
本发明专利技术公开一种高效的保存api接口调用日志的方法,包含以下步骤:步骤1、准备工作:新建一个自定义的filter,并把filter的优先级设置为自定义过滤器的最高级别,同时设置需要保存日志的过滤url,把filter添加到系统的过滤链中;步骤2、当被步骤1创建的filter拦截的api接口,被请求时,filter的doFilter方法被触发,并拿到对应的servletRequest对象,然后拿到servletRequest对象的请求Id,本发明专利技术使用阻塞队列把日志数据暂存在队列中,当队列数据量达到阈值,然后批量取出批量保存,避免频繁的操作数据,从而减轻数据库压力。

【技术实现步骤摘要】

本专利技术涉及it与软件开发,具体是一种高效的保存api接口调用日志的方法


技术介绍

1、当前,随着行业的对安全相关方面的要求越来越严格,为了配合安全审计,保存多个系统之间相互调用api接口的日志变得必不可少。

2、现有技术方案是利用aop切面加上自定义注解,去实现调用日志的记录,将自定义注解加到需要保存日志的方法上,调用一次保存一次日志。这种实现方案存在如下的缺点:

3、1、效率低,高并发场景下影响正常业务的响应速度;

4、2、高并发场景下一条一条的保存,会压垮数据导致系统宕机;

5、3、记录日志不全,无法记录被验签和签权过滤掉的请求。


技术实现思路

1、本专利技术的目的在于提供一种高效的保存api接口调用日志的方法,以解决上述
技术介绍
中提出的效率低、导致系统宕机、记录日志不全,无法记录被验签和签权过滤掉的请求等问题。

2、为实现上述目的,本专利技术提供如下技术方案:

3、一种高效的保存api接口调用日志的方法,包含以下步骤:

4、步骤1、准备工作:新建一个自定义的filter,并把filter的优先级设置为自定义过滤器的最高级别,同时设置需要保存日志的过滤url,把filter添加到系统的过滤链中;

5、步骤2、当被步骤1创建的filter拦截的api接口,被请求时,filter的dofilter方法被触发,并拿到对应的servletrequest对象,然后拿到servletrequest对象的请求id;

6、步骤3、计算步骤2获取到的请求id的hash值,用hash值对16进行取模,获取对应的下标i;

7、步骤4、根据步骤3获取的下标i,从linkedblockingqueue数组中获取对应位置的队列queue[i];

8、步骤5、对步骤4获取的queue[i],加上可重入锁reentrantlock;

9、步骤6、把request请求对象组织成日志对象,把日志对象加入队列中,并获取返回值;

10、步骤7、判断步骤6获取到的返回值,如果为true则不进行任何操作,如果为false,则说明queue中的对象已经达到阈值,取出对应中的数据,使用线程池异步调用jdbc批量写入功能把5000条日志数据一次性写入数据库,清空此队列,用于接受下一次请求;

11、步骤8、释放queue[i]上的锁;

12、步骤9、创建定时任务,定时把队列里面的数据,取出保存到数据库中。

13、作为本专利技术的进一步技术方案:所述步骤1还包括:新建一个用于暂存日志数据的全局linkedblockingqueue队列数组。

14、作为本专利技术的进一步技术方案:所述每个队列的阈值设置为5000。

15、作为本专利技术的进一步技术方案:所述步骤1还包括:创建一个自定义的线程池threadpoolexecutor用于保存日志到数据库中。

16、作为本专利技术的进一步技术方案:所述步骤1还包括:在连接数据库的地址上加入rewritebatchedstatements=true配置,开启mysql批量插入功能。

17、作为本专利技术的进一步技术方案:所述步骤3采用hash函数计算步骤2获取到的请求id的hash值。

18、作为本专利技术的进一步技术方案:所述步骤5能够保证高并发下的安全问题。

19、作为本专利技术的进一步技术方案:所述步骤6是利用linkedblockingqueue的offer方法把日志对象加入队列中。

20、作为本专利技术的进一步技术方案:所述步骤8用于保证下一次请求日志能够入队。

21、作为本专利技术的进一步技术方案:所述步骤9用于解决请求低峰期,队列里面的数据量一直无法达到阈值,导致日志数据入库延迟过大的问题。

22、与现有技术相比,本专利技术的有益效果是:

23、1.使用阻塞队列把日志数据暂存在队列中,当队列数据量达到阈值,然后批量取出批量保存,避免频繁的操作数据,从而减轻数据库压力。

24、2.使用分片锁的思想,解决高并发下日志暂存队列时的锁竞争问题,提高系统的吞吐量。

25、3.使用过滤器拦截请求,保证所有的请求只要进入系统就能够完整的记录。

26、4.使用线程池异步,批量保存日志数据,减少日志保存对正常业务的影响,提高接口的响应效率。

27、5.使用定时任务,定时刷出队列中的数据,保证在业务低峰期调用日志的及时性。

本文档来自技高网...

【技术保护点】

1.一种高效的保存api接口调用日志的方法,其特征在于,包含以下步骤:

2.根据权利要求1所述的一种高效的保存api接口调用日志的方法,其特征在于,所述步骤1还包括:新建一个用于暂存日志数据的全局LinkedBlockingQueue队列数组。

3.根据权利要求2所述的一种高效的保存api接口调用日志的方法,其特征在于,所述每个队列的阈值设置为5000。

4.根据权利要求2所述的一种高效的保存api接口调用日志的方法,其特征在于,所述步骤1还包括:创建一个自定义的线程池ThreadPoolExecutor用于保存日志到数据库中。

5.根据权利要求4所述的一种高效的保存api接口调用日志的方法,其特征在于,所述步骤1还包括:在连接数据库的地址上加入rewriteBatchedStatements=true配置,开启mysql批量插入功能。

6.根据权利要求1所述的一种高效的保存api接口调用日志的方法,其特征在于,所述步骤3采用hash函数计算步骤2获取到的请求Id的hash值。

7.根据权利要求1所述的一种高效的保存api接口调用日志的方法,其特征在于,所述步骤5能够保证高并发下的安全问题。

8.根据权利要求1所述的一种高效的保存api接口调用日志的方法,其特征在于,所述步骤6是利用LinkedBlockingQueue的offer方法把日志对象加入队列中。

9.根据权利要求1所述的一种高效的保存api接口调用日志的方法,其特征在于,所述步骤8用于保证下一次请求日志能够入队。

10.根据权利要求1所述的一种高效的保存api接口调用日志的方法,其特征在于,所述步骤9用于解决请求低峰期,队列里面的数据量一直无法达到阈值,导致日志数据入库延迟过大的问题。

...

【技术特征摘要】

1.一种高效的保存api接口调用日志的方法,其特征在于,包含以下步骤:

2.根据权利要求1所述的一种高效的保存api接口调用日志的方法,其特征在于,所述步骤1还包括:新建一个用于暂存日志数据的全局linkedblockingqueue队列数组。

3.根据权利要求2所述的一种高效的保存api接口调用日志的方法,其特征在于,所述每个队列的阈值设置为5000。

4.根据权利要求2所述的一种高效的保存api接口调用日志的方法,其特征在于,所述步骤1还包括:创建一个自定义的线程池threadpoolexecutor用于保存日志到数据库中。

5.根据权利要求4所述的一种高效的保存api接口调用日志的方法,其特征在于,所述步骤1还包括:在连接数据库的地址上加入rewritebatchedstatements=true配置,开启mysql批量插入功...

【专利技术属性】
技术研发人员:李志霄邓志强宋腾飞周娟
申请(专利权)人:天翼云科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1