CN112882919A - 基于log4j的微服务架构的日志链路追踪方法和系统 - Google Patents

基于log4j的微服务架构的日志链路追踪方法和系统 Download PDF

Info

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
Application number
CN202110332820.0A
Other languages
English (en)
Inventor
宋喆
高传集
于昊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Cloud Information Technology Co Ltd
Original Assignee
Inspur Cloud Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Inspur Cloud Information Technology Co Ltd filed Critical Inspur Cloud Information Technology Co Ltd
Priority to CN202110332820.0A priority Critical patent/CN112882919A/zh
Publication of CN112882919A publication Critical patent/CN112882919A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording 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/3466Performance evaluation by tracing or monitoring
    • G06F11/3476Data 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的微服务架构的日志链路追踪方法和系统
技术领域
本发明公开方法和系统,涉及系统开发技术领域,具体地说是基于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内的唯一标识。
CN202110332820.0A 2021-03-29 2021-03-29 基于log4j的微服务架构的日志链路追踪方法和系统 Pending CN112882919A (zh)

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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113867913A (zh) * 2021-09-27 2021-12-31 平安国际智慧城市科技股份有限公司 面向微服务的业务请求处理方法、装置、设备及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
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 中国电力财务有限公司 一种微服务链路追踪的方法及系统

Patent Citations (7)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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