CN112882919A - 基于log4j的微服务架构的日志链路追踪方法和系统 - Google Patents
基于log4j的微服务架构的日志链路追踪方法和系统 Download PDFInfo
- Publication number
- CN112882919A CN112882919A CN202110332820.0A CN202110332820A CN112882919A CN 112882919 A CN112882919 A CN 112882919A CN 202110332820 A CN202110332820 A CN 202110332820A CN 112882919 A CN112882919 A CN 112882919A
- Authority
- CN
- China
- Prior art keywords
- mdc
- thread
- class
- unique identifier
- log4j
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 83
- 238000004806 packaging method and process Methods 0.000 claims abstract description 30
- 238000012545 processing Methods 0.000 claims abstract description 16
- 230000003068 static effect Effects 0.000 claims description 13
- 238000012856 packing Methods 0.000 claims description 6
- 230000008569 process Effects 0.000 claims description 4
- 238000010276 construction Methods 0.000 claims description 3
- 230000033772 system development Effects 0.000 abstract description 2
- 230000006870 function Effects 0.000 description 3
- 238000004140 cleaning Methods 0.000 description 2
- GHVNFZFCNZKVNT-UHFFFAOYSA-N decanoic acid Chemical compound CCCCCCCCCC(O)=O GHVNFZFCNZKVNT-UHFFFAOYSA-N 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 235000010627 Phaseolus vulgaris Nutrition 0.000 description 1
- 244000046052 Phaseolus vulgaris Species 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000005111 flow chemistry technique Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000007639 printing Methods 0.000 description 1
- 238000004886 process control Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/3476—Data logging
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开基于log4j的微服务架构的日志链路追踪方法和系统,涉及系统开发技术领域;拦截业务请求,在业务请求内添加唯一标识,并将唯一标识添加到MDC中,拦截队列消息,解析队列消息获取唯一标识,并将唯一标识添加到MDC中,使用多线程处理业务请求或消息队列流程,根据不同的实现方式选择不同的多线程包装类,在子线程创建时继承父线程的MDC,并在线程调用外部接口时为每次请求获取MDC内的唯一标识,通过log4j的日志配置文件配置唯一标识,输出日志同时输出相应唯一标识。
Description
技术领域
本发明公开方法和系统,涉及系统开发技术领域,具体地说是基于log4j的微服务架构的日志链路追踪方法和系统。
背景技术
随着云计算、容器技术的日渐成熟,微服务架构随时而生,微服务架构将单一应用程序划分成一组小的服务,服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和服务之间采用轻量级的通信机制相互沟通(通常是基于HTTP的Restful API),每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。
大型业务平台集成于微服务架构,大量的业务基于不同产品或者服务的微服务建设,庞大的业务存在互相调用的情景,业务场景复杂,业务频繁互相调用对开发人员来说进行问题定位非常困难。并且针对微服务系统内的用户请求或者消息队列内的消息处理,存在跨服务、服务相互依赖调用等情况,情景也十分复杂,导致日志串联追踪十分困难,耗时耗力。
发明内容
本发明针对现有技术的问题,提供基于log4j的微服务架构的日志链路追踪方法和系统,解决在微服务系统架构内,服务调用及消息队列消息处理的日志串联追踪、问题定位混乱等问题。
本发明提出的具体方案是:
基于log4j的微服务架构的日志链路追踪方法:拦截业务请求,在业务请求内添加唯一标识,并将唯一标识添加到MDC中,
拦截队列消息,解析队列消息获取唯一标识,并将唯一标识添加到MDC中,
使用多线程处理业务请求或消息队列流程,根据不同的实现方式选择不同的多线程包装类,在子线程创建时继承父线程的MDC,并在线程调用外部接口时为每次请求获取MDC内的唯一标识,通过log4j的日志配置文件配置唯一标识,输出日志同时输出相应唯一标识。
优选地,所述的基于log4j的微服务架构的日志链路追踪方法中在业务请求内添加唯一标识之前,判断业务请求内是否存在唯一标识,存在则直接添加唯一标识到MDC,否则自定义唯一标识。
优选地,所述的基于log4j的微服务架构的日志链路追踪方法中解析队列消息,判断队列消息是否存在唯一标识,存在则直接将唯一标识添加到MDC中,否则自定义消息的唯一标识。
优选地,所述的基于log4j的微服务架构的日志链路追踪方法中实现多线程处理业务请求或消息队列流程方式包括但不限于Thread,Runnable,Callable、线程池及线程池复用。
优选地,所述的基于log4j的微服务架构的日志链路追踪方法中选择Thread实现的多线程处理业务请求或消息队列流程:新建Thread包装类,Thread包装类继承Thread,定义静态Thread类变量thread和存储MDC的内容的map;
构造函数以Thread类为参数,把参数赋值thread;覆写run方法,重新获取MDC内容并赋值。
优选地,所述的基于log4j的微服务架构的日志链路追踪方法中选择Runnable实现的多线程处理业务请求或消息队列流程:新建Runnable包装类,Runnable包装类实现Runnable接口,定义静态Runnable类变量runnable和存储MDC的内容的map;构造函数以Runnable类为参数,把参数赋值runnable;覆写run方法,重新获取MDC内容并赋值。
优选地,所述的基于log4j的微服务架构的日志链路追踪方法中选择Callable实现的多线程处理业务请求或消息队列流程:新建Callable包装类,Callable包装类实现Callable接口,定义静态Callable类变量callable和存储MDC的内容的map;构造函数以Callable类为参数,把参数赋值callable;覆写run方法,重新获取MDC内容并赋值。
优选地,所述的基于log4j的微服务架构的日志链路追踪方法中选择线程池实现的多线程处理业务请求或消息队列流程:新建线程池类的包装类,其中线程池类的包装类继承线程池,定义静态线程池类变量threadpool和存储MDC的内容的map;构造函数以线程池类为参数,把参数赋值threadpool;分别覆写execute和submit方法,重新获取MDC内容并赋值。
优选地,所述的基于log4j的微服务架构的日志链路追踪方法中选择线程复用实现的多线程处理业务请求或消息队列流程:在定义线程池时设置线程池decorate为TaskDecorator包装类,TaskDecorator包装类覆写TaskDecorator的decorate方法,获取MDC内容。
优选地,所述的基于log4j的微服务架构的日志链路追踪方法中定义RestTemplate类的包装类,继承RestTemplate类,线程调用外部接口时调用RestTemplate包装类的相应函数方法获取RestTemplate实例,为每次请求获取MDC内的唯一标识。
本发明的有益之处是:
本发明提供基于log4j的微服务架构的日志链路追踪方法,基于log4j的微服务架构,在业务请求及队列消息进行流程处理将唯一标识添加到MDC中,利用多线程处理业务及队列消息的流程时,通过子线程继承父线程的MDC,可以重新获得MDC内容及相关唯一标识,并在调用外部接口时,每次都为调用请求添加唯一标识,日志输出时,通过配置文件配置唯一标识,从而输出日志同时输出唯一标识,达到用户及开发人员查询日志时,就可以按照此唯一标识查询出请求的路径及系统间调用的情况,方便用户查询及流程控制的目的,完成日志链路追踪。
附图说明
图1是本发明方法流程示意图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定。
本发明提供基于log4j的微服务架构的日志链路追踪方法:拦截业务请求,在业务请求内添加唯一标识,并将唯一标识添加到MDC中,
拦截队列消息,解析队列消息获取唯一标识,并将唯一标识添加到MDC中,
使用多线程处理业务请求或消息队列流程,根据不同的实现方式选择不同的多线程包装类,在子线程创建时继承父线程的MDC,并在线程调用外部接口时为每次请求获取MDC内的唯一标识,通过log4j的日志配置文件配置唯一标识,输出日志同时输出相应唯一标识。
利用本发明方法用户及开发人员查询日志时,就可以按照此唯一标识查询出请求的路径及系统间调用的情况,方便用户查询及流程控制的目的,完成日志链路追踪。
具有应用中,在本发明的一些实施例中,针对业务请求执行的日志输出请求,判断请求内是否有请求唯一标识,比如通过HandlerInterceptor接口,并覆写preHandle方法,在preHandle内判断HttpServletRequest的Header是否含有Request-Id这一唯一标识,
没有则自定义唯一的标识,比如默认设置一个UUID作为唯一的标识,把唯一标识添加到MDC中,并把唯一标识添加到MDC中,并在HttpServletResponse中添加唯一标识,方便用户查看查找对应;并可在日志输出请求执行之后,覆写postHandle方法,在方法内调用MDC的清理方法,把MDC清理掉,以免引起内存溢出。
对于消息队列,根据面向切面编程,添加注解的实现方法,在业务逻辑方法执行之前队列消息,解析队列消息获取唯一标识或者设置一个UUID作为唯一的标识,把唯一标识添加到MDC中,在业务逻辑方法执行完之后把MDC清理掉,以免引起内存溢出。
在上述实施例基础上,如果处理请求或者消息队列的流程程序内用到多线程,根据不同的实现方式选择不同的包装类:
如果程序内用到Thread实现的多线程,则新建Thread包装类,其中Thread包装类继承Thread,定义静态Thread类变量thread和存储MDC的内容的map;构造函数以Thread类为参数,把参数赋值thread;覆写run方法,方法内判断map为空,为空则重新获取MDC内容并赋值,再调用thread的run方法;最后finally清除掉MDC;
如果程序内用到Runnable实现的多线程,则新建Runnable包装类,其中Runnable包装类实现Runnable接口,定义静态Runnable类变量runnable和存储MDC的内容的map;构造函数以Runnable类为参数,把参数赋值runnable;覆写run方法,方法内判断map为空,为空则重新获取MDC内容并赋值,再调用runnable的run方法;最后finally清除掉MDC;
如果程序内用到Runnable实现的多线程,则新建Runnable包装类,其中Runnable包装类实现Runnable接口,定义静态Runnable类变量runnable和存储MDC的内容的map;构造函数以Runnable类为参数,把参数赋值runnable;覆写run方法,方法内判断map为空,为空则重新获取MDC内容并赋值,再调用runnable的run方法;最后finally清除掉MDC;
如果程序内用到Callable实现的多线程,则新建Callable包装类,其中Callable包装类实现Callable接口,定义静态Callable类变量callable和存储MDC的内容的map;构造函数以Callable类为参数,把参数赋值callable;覆写run方法,方法内判断map为空,为空则重新获取MDC内容并赋值,再调用callable的call方法;最后finally清除掉MDC;
如果程序内用到线程池类实现的多线程,则新建线程池类的包装类,其中线程池类的包装类继承线程池,定义静态线程池类变量threadpool和存储MDC的内容的map;构造函数以线程池类为参数,把参数赋值threadpool;分别覆写用到的execute和submit方法方法,方法内判断map为空,为空则重新获取MDC内容并赋值,再调用execute和submit方法;最后finally清除掉MDC;
如果程序内用注解和线程复用实现的多线程,则在定义线程池时设置线程池decorate为TaskDecorator包装类,其中TaskDecorator包装类覆写TaskDecorator的decorate方法,获取MDC内容,在return内把MDC赋值获取的MDC内容,最后处理完成后进行MDC的清理;程序的启动类继承AsyncConfigurerSupport类,并用自定义的线程池Bean。
并可定义ClientHttpRequestFactory类的包装类,此类继承Http ComponentsClient Http Request Factory类和ClientHttpRequestFactory接口,覆写postProcessHttpRequest方法,在方法内获取MDC的Request-Id的唯一标识,并把唯一标识设置为方法参数HttpUriRequest的Header给其他服务使用;定义RestTemplate类的包装类,此类继承RestTemplate类,并添加构造函数,构造函数的参数为ClientHttpRequestFactory包装类,程序内调用外部的接口程序统一用此方法,此方法提供唯一获取RestTemplate实例的方法,每次请求都会自动添加上Request-Id的唯一标识,把请求串联起来,在log4j的日志配置文件内添加%X{Request-Id},调用日志输出时,日志就会打印输出Request-Id。
利用本发明方法在业务请求和消息队列处理流程中,实现了多种多线程实现类添加唯一标识,在日志输出时输出唯一标识,方便用户查询及流程控制。
以上所述实施例仅是为充分说明本发明而所举的较佳的实施例,本发明的保护范围不限于此。本技术领域的技术人员在本发明基础上所作的等同替代或变换,均在本发明的保护范围之内。本发明的保护范围以权利要求书为准。
Claims (10)
1.基于log4j的微服务架构的日志链路追踪方法,其特征是拦截业务请求,在业务请求内添加唯一标识,并将唯一标识添加到MDC中,
拦截队列消息,解析队列消息获取唯一标识,并将唯一标识添加到MDC中,
使用多线程处理业务请求或消息队列流程,根据不同的实现方式选择不同的多线程包装类,在子线程创建时继承父线程的MDC,并在线程调用外部接口时为每次请求获取MDC内的唯一标识,通过log4j的日志配置文件配置唯一标识,输出日志同时输出相应唯一标识。
2.根据权利要求1所述的基于log4j的微服务架构的日志链路追踪方法,其特征是在业务请求内添加唯一标识之前,判断业务请求内是否存在唯一标识,存在则直接添加唯一标识到MDC,否则自定义唯一标识。
3.根据权利要求1或2所述的基于log4j的微服务架构的日志链路追踪方法,其特征是解析队列消息,判断队列消息是否存在唯一标识,存在则直接将唯一标识添加到MDC中,否则自定义消息的唯一标识。
4.根据权利要求1-3任一所述的基于log4j的微服务架构的日志链路追踪方法,其特征是实现多线程处理业务请求或消息队列流程方式包括但不限于Thread,Runnable,Callable、线程池及线程池复用。
5.根据权利要求4所述的基于log4j的微服务架构的日志链路追踪方法,其特征是选择Thread实现的多线程处理业务请求或消息队列流程:新建Thread包装类,Thread包装类继承Thread,定义静态Thread类变量thread和存储MDC的内容的map;
构造函数以Thread类为参数,把参数赋值thread;覆写run方法,重新获取MDC内容并赋值。
6.根据权利要求4所述的基于log4j的微服务架构的日志链路追踪方法,其特征是选择Runnable实现的多线程处理业务请求或消息队列流程:新建Runnable包装类,Runnable包装类实现Runnable接口,定义静态Runnable类变量runnable和存储MDC的内容的map;构造函数以Runnable类为参数,把参数赋值runnable;覆写run方法,重新获取MDC内容并赋值。
7.根据权利要求4所述的基于log4j的微服务架构的日志链路追踪方法,其特征是选择Callable实现的多线程处理业务请求或消息队列流程:新建Callable包装类,Callable包装类实现Callable接口,定义静态Callable类变量callable和存储MDC的内容的map;构造函数以Callable类为参数,把参数赋值callable;覆写run方法,重新获取MDC内容并赋值。
8.根据权利要求4所述的基于log4j的微服务架构的日志链路追踪方法,其特征是选择线程池实现的多线程处理业务请求或消息队列流程:新建线程池类的包装类,其中线程池类的包装类继承线程池,定义静态线程池类变量threadpool和存储MDC的内容的map;构造函数以线程池类为参数,把参数赋值threadpool;分别覆写execute和submit方法,重新获取MDC内容并赋值。
9.根据权利要求4所述的基于log4j的微服务架构的日志链路追踪方法,其特征是选择线程复用实现的多线程处理业务请求或消息队列流程:在定义线程池时设置线程池decorate为TaskDecorator包装类,TaskDecorator包装类覆写TaskDecorator的decorate方法,获取MDC内容。
10.根据权利要求1-9任一所述的基于log4j的微服务架构的日志链路追踪方法,其特征是定义RestTemplate类的包装类,继承RestTemplate类,线程调用外部接口时调用RestTemplate包装类的相应函数方法获取RestTemplate实例,为每次请求获取MDC内的唯一标识。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110332820.0A CN112882919A (zh) | 2021-03-29 | 2021-03-29 | 基于log4j的微服务架构的日志链路追踪方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110332820.0A CN112882919A (zh) | 2021-03-29 | 2021-03-29 | 基于log4j的微服务架构的日志链路追踪方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112882919A true CN112882919A (zh) | 2021-06-01 |
Family
ID=76039898
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110332820.0A Pending CN112882919A (zh) | 2021-03-29 | 2021-03-29 | 基于log4j的微服务架构的日志链路追踪方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112882919A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113867913A (zh) * | 2021-09-27 | 2021-12-31 | 平安国际智慧城市科技股份有限公司 | 面向微服务的业务请求处理方法、装置、设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109582655A (zh) * | 2018-11-08 | 2019-04-05 | 深圳市云智融科技有限公司 | 系统日志的定位方法及装置、计算机可读存储介质 |
CN109815202A (zh) * | 2018-12-29 | 2019-05-28 | 深圳云天励飞技术有限公司 | 日志编辑方法及相关装置 |
CN110445643A (zh) * | 2019-07-25 | 2019-11-12 | 泰康保险集团股份有限公司 | 异步微服务调用链路跟踪方法、装置、介质及电子设备 |
US20200142818A1 (en) * | 2018-11-02 | 2020-05-07 | Infosys Limited | Method and system for regression test selection in a multi-threaded distributed target program execution tested by multi-threaded test suites |
CN111435327A (zh) * | 2019-01-15 | 2020-07-21 | 菜鸟智能物流控股有限公司 | 一种日志记录的处理方法、装置及系统 |
CN112118286A (zh) * | 2020-08-04 | 2020-12-22 | 紫光云(南京)数字技术有限公司 | 基于mdc多线程链路追踪方法、装置及计算机可读存储介质 |
CN112286776A (zh) * | 2020-11-04 | 2021-01-29 | 中国电力财务有限公司 | 一种微服务链路追踪的方法及系统 |
-
2021
- 2021-03-29 CN CN202110332820.0A patent/CN112882919A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20200142818A1 (en) * | 2018-11-02 | 2020-05-07 | Infosys Limited | Method and system for regression test selection in a multi-threaded distributed target program execution tested by multi-threaded test suites |
CN109582655A (zh) * | 2018-11-08 | 2019-04-05 | 深圳市云智融科技有限公司 | 系统日志的定位方法及装置、计算机可读存储介质 |
CN109815202A (zh) * | 2018-12-29 | 2019-05-28 | 深圳云天励飞技术有限公司 | 日志编辑方法及相关装置 |
CN111435327A (zh) * | 2019-01-15 | 2020-07-21 | 菜鸟智能物流控股有限公司 | 一种日志记录的处理方法、装置及系统 |
CN110445643A (zh) * | 2019-07-25 | 2019-11-12 | 泰康保险集团股份有限公司 | 异步微服务调用链路跟踪方法、装置、介质及电子设备 |
CN112118286A (zh) * | 2020-08-04 | 2020-12-22 | 紫光云(南京)数字技术有限公司 | 基于mdc多线程链路追踪方法、装置及计算机可读存储介质 |
CN112286776A (zh) * | 2020-11-04 | 2021-01-29 | 中国电力财务有限公司 | 一种微服务链路追踪的方法及系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113867913A (zh) * | 2021-09-27 | 2021-12-31 | 平安国际智慧城市科技股份有限公司 | 面向微服务的业务请求处理方法、装置、设备及存储介质 |
CN113867913B (zh) * | 2021-09-27 | 2024-10-01 | 平安国际智慧城市科技股份有限公司 | 面向微服务的业务请求处理方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11741412B2 (en) | Event-based composition model for workflow systems | |
US10606565B2 (en) | Visual devops systems and methods | |
US20190392617A1 (en) | Visual workflow model | |
US9904585B1 (en) | Error handling in executing workflow state machines | |
JP7090152B2 (ja) | デバイス設計のためのコードモジュール選択 | |
US8566784B2 (en) | Business process change controller | |
US9766927B1 (en) | Data flow management in processing workflows | |
JP2020536318A (ja) | デプロイされたコンテナプラットフォームにおけるインスタンスのリアルタイムデバッグ | |
CA2951618A1 (en) | Data pipeline architecture for cloud processing of structured and unstructured data | |
US11363117B2 (en) | Software-specific auto scaling | |
US10938968B2 (en) | Harmonized data for engineering simulation | |
US11431563B1 (en) | Intelligent management of cloud infrastructures using a cloud management platform | |
CA3073519C (en) | Scalable techniques for executing custom algorithms on media items | |
US20200326931A1 (en) | Federated Framework for Container Management | |
US20190207867A1 (en) | Platform with multiple execution engines | |
RU2605918C2 (ru) | Способ предоставления функций в промышленной системе автоматизации и промышленная система автоматизации | |
US20230037199A1 (en) | Intelligent integration of cloud infrastructure tools for creating cloud infrastructures | |
US20220156097A1 (en) | Systems and methods to pre-provision sockets for serverless functions | |
US20190205182A1 (en) | Unified monitoring interface | |
CN114240382A (zh) | 基于结构化流程模板的流程实例生成方法及装置 | |
CN112882846A (zh) | 消息队列的数据处理方法、装置、计算机设备和存储介质 | |
CN112882919A (zh) | 基于log4j的微服务架构的日志链路追踪方法和系统 | |
US20140165066A1 (en) | Optimized datacenter management by centralized task execution through dependency inversion | |
WO2021168640A1 (en) | Method, system and computer-readable medium for integrating a backend-as-a-service with an online service | |
US11416384B1 (en) | System and method for generating and executing automated regression |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210601 |
|
RJ01 | Rejection of invention patent application after publication |