CN114064384A - 一种打印日志的方法、装置及系统 - Google Patents

一种打印日志的方法、装置及系统 Download PDF

Info

Publication number
CN114064384A
CN114064384A CN202010762131.9A CN202010762131A CN114064384A CN 114064384 A CN114064384 A CN 114064384A CN 202010762131 A CN202010762131 A CN 202010762131A CN 114064384 A CN114064384 A CN 114064384A
Authority
CN
China
Prior art keywords
service module
service
request
log
network
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
CN202010762131.9A
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202010762131.9A priority Critical patent/CN114064384A/zh
Priority to PCT/CN2021/108370 priority patent/WO2022022446A1/zh
Publication of CN114064384A publication Critical patent/CN114064384A/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/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3006Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is distributed, e.g. networked systems, clusters, multiprocessor systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3051Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3089Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请实施例公开了一种打印日志的方法,用于控制日志的打印,以减少日志的打印数量,以避免打印日志而占用大量的资源。本申请实施例方法包括:第一业务模块接收第一网络请求,第一网络请求用于调用第一业务模块;第一业务模块可以基于第一业务模块在处理第一网络请求的过程中运行错误打印日志;若第一业务模块处理第一网络请求的过程中为调用第二业务模块而发送第二网络请求,则第一业务模块也可以基于第一业务模块接收的来自第二业务模块的第一网络响应中携带有错误标识,打印日志,其中,第一网络响应是对于第二网络请求的,第一业务模块和第二业务模块属于目标调用链,错误标识指示目标调用链中存在运行错误的业务模块。

Description

一种打印日志的方法、装置及系统
技术领域
本申请涉及调用链技术领域,尤其涉及一种打印日志的方法、装置及系统。
背景技术
随着技术的发展,软件已经由原来的单体软件系统演变为现在的服务化软件系统。单体软件系统是指一个软件运行在一个操作系统中,并且往往只有一个进程,该软件的所有命令都住在该操作系统中完成,例如QQ软件。而服务化软件系统往往包含多个子软件,多个子软件可以运行在一个或多个操作系统中,每个子软件构成一个业务模块。多个存在调用关系的业务模块构成一条调用链,用于处理来自客户端的一类网络请求。
由于一类网络请求需要一条调用链中的多个业务模块来处理,并且这多个业务模块间的调用关系可能比较复杂,所以当服务化软件系统出现故障时,快速定位出现问题的业务模块显得尤其重要。目前,主要是利用业务模块打印的日志定位出现问题的业务模块。具体地,业务模块在接收到网络请求时,会打印入口日志;业务模块在发送网络响应时,会打印出口日志。最终通过入口日志和出口日志分析出现问题的业务模块。
然而,由于服务化软件系统的业务量大,所以服务化软件系统中的每条调用链都会处理大量的网络请求,也就需要打印大量的入口日志和出口日志,而打印入口日志和出口日志的过程无疑会占用过多的资源。
发明内容
本申请实施例提供了一种打印日志的方法,用于控制日志的打印,以减少日志的打印数量,以避免打印日志而占用大量的资源。
本申请实施例第一方面提供了一种打印日志的方法,方法包括:第一业务模块接收第一网络请求,第一网络请求用于调用第一业务模块,第一网络请求可以来自客户端,也可以来自目标调用链中的其他业务模块;基于第一业务模块在处理第一网络请求的过程中运行错误,或基于第一业务模块接收的来自第二业务模块的第一网络响应中携带有错误标识,第一业务模块打印日志,其中,所述第一网络响应是对于第二网络请求的,第二网络请求是第一业务模块处理第一网络请求的过程中为调用第二业务模块而发送的,第一业务模块和第二业务模块属于目标调用链,错误标识指示目标调用链中存在运行错误的业务模块。其中,错误标识的形式可以有多种,例如可以是在第一响应中添加的字段的值。
先识别目标调用链中存在运行错误的业务模块的情况,然后打印日志,能够起到控制日志打印的作用,从而减少日志的打印数量,以避免打印日志而占用大量的资源;也不会因盲目减少日志打印数量而影响对出问题的业务模块的定位。
在一种实现方式下,预设第一周期内,第一业务模块在目标调用链中存在运行错误的业务模块的情况下,打印的日志数量小于第一预设数量。其中,第一周期可以根据实际需要进行设定,例如可以为一分钟;第一预设数量也可以根据实际需要进行设定,例如可以设置为5、6、7和8等。
控制第一业务模块在第一周期内,且在目标调用链中存在运行错误的业务模块的情况下打印的日志数量,从而防止在第一周期内,由于同一原因导致某一业务模块运行错误,以致于第一业务模块打印大量的日志;因此,本申请实施例能够在不对定位运行错误的业务模块造成影响的前提下,起到控制第一业务模块打印日志数量的作用。
在一种实现方式下,在第一业务模块接收第一网络请求之后,方法还包括:第一业务模块保存第一网络请求中的数据至内存;第一业务模块发送对于第一网络请求的第二网络响应,第二网络响应指示调用第一业务模块的结果。第一业务模块打印日志包括:第一业务模块根据保存的第一网络请求中的数据打印入口日志;第一业务模块根据第二网络响应中的数据打印出口日志。
第一业务模块在接收到第一网络请求后,先不打印日志,而是将第一网络请求中的数据保存至内存;当第一业务模块在处理第一网络请求的过程中运行错误,或第一网络响应中携带有错误标识时,第一业务模块根据保存的第一网络请求中的数据打印入口日志,从而避免在未确定目标调用链中存在运行错误的业务模块的情况下打印入口日志,占用资源。
在一种实现方式下,第一网络请求来自于第三业务模块,第三业务模块属于目标调用链;第一业务模块发送对于第一网络请求的第二网络响应包括:基于第一业务模块运行错误或第一网络响应中携带有错误标识,第一业务模块向第三业务模块发送对于第一网络请求的携带有错误标识的第二网络响应,以使得第三业务模块打印日志。
在一种实现方式下,方法还包括:基于第一网络请求中携带有错误标识或第一业务模块运行错误,第一业务模块向第二业务模块发送携带有错误标识的第二网络请求。
在一种实现方式下,方法还包括:第一业务模块接收第三网络请求,第三网络请求用于调用第一业务模块,其中,第三网络请求与第一网络请求是在目标调用链处理同一类型的业务请求的过程中接收到的;基于第一业务模块在处理第三网络请求的过程中未运行错误,且接收到的第三网络响应中不包含错误标识,第一业务模块不打印日志。
在第一业务模块未运行错误,且接收到的第三网络响应中不包含错误标识的情况下,第一业务模块不打印日志,减少了日志打印数量,且不影响定位运行错误的业务模块;并且,由于多数时间内目标调用链中都不存在运行错误的业务模块,所以本申请实施例能够极大地减少日志的打印数量。
在一种实现方式下,方法还包括:第一业务模块接收第三网络请求,第三网络请求用于调用第一业务模块;基于预设第二周期内,第一业务模块在处理第三网络请求的过程中未运行错误,且接收到的第三网络响应中不包含错误标识的情况下,第一业务模块已打印的日志数量小于第二预设数量,第一业务模块打印日志。
在目标调用链中不存在运行错误的业务模块的情况下,第一业务模块打印日志,该日志属于正确的日志,所以可以作为错误日志的参照,用于确定运行错误的业务模块;且在预设第二周期内,第一业务模块在上述情况下打印的日志数量小于第二预设数量,从而可以控制日志的打印数量,防止打印过多的正确日志导致占用过多的资源。
在一种实现方式下,目标调用链属于目标业务系统,且用于处理客户端发送的特定类型业务请求,目标业务系统还包括日志管理模块,特定类型业务请求包括第一业务请求和第二业务请求,目标调用链还包括第四业务模块;第一网络请求是第一业务模块在目标调用链处理第一业务请求的过程中接收到的;其中,第一网络请求可以是来自客户端的第一业务请求,也可以是来自其他业务模块的网络请求。
方法还包括:日志管理模块获取在目标调用链处理第一业务请求的过程中,目标调用链中业务模块打印的日志;基于目标调用链中业务模块打印的日志中未包含第四业务模块打印的日志,日志管理模块获取第四业务模块在目标调用链处理第二业务请求的过程中打印的日志,第四业务模块在目标调用链处理第二业务请求的过程中打印的日志用于对目标调用链处理第一业务请求的过程进行分析,且指示在目标调用链处理第二业务请求的过程中目标调用链中不存在运行错误的业务模块。
采用第四业务模块在目标调用链处理第二业务请求的过程中打印的正确日志,对目标调用链处理第一业务请求的过程进行分析,以避免在对目标调用链处理第一业务请求的过程进行分析时,误认为在目标调用链处理第一业务请求的过程中,第四业务模块运行错误,从而提高日志分析的准确度。
在一种实现方式下,在目标调用链已处理的特定类型业务请求的所有业务请求中,第二业务请求的请求时间早于且最接近第一业务请求的请求时间。
在目标调用链已处理的特定类型业务请求的所有业务请求中,第二业务请求的请求时间早于且最接近第一业务请求的请求时间,使得日志管理模块获取到的正确日志更接近于,第四业务模块在目标调用链处理第一业务请求的过程中打印的正确日志,从而提高分析目标调用链处理第一业务请求的过程的准确性,避免日志管理模块选择的正确日志与第四业务模块在目标调用链处理第一业务请求的过程中打印的正确日志相差较大,而影响对目标调用链处理第一业务请求的过程的分析。
本申请实施例第二方面提供了一种打印日志的装置,装置包括:接收单元,用于接收第一网络请求;日志打印单元,用于基于在处理第一网络请求的过程中运行错误,或基于接收的来自第二业务模块的对于第二网络请求的第一网络响应中携带有错误标识,打印日志,第二网络请求是处理第一网络请求的过程中为调用第二业务模块而发送的,第二业务模块属于目标调用链,错误标识指示目标调用链中存在运行错误的业务模块。
在一种实现方式下,预设第一周期内,第一业务模块在目标调用链中存在运行错误的业务模块的情况下,打印的日志数量小于第一预设数量。
在一种实现方式下,装置还包括:保存单元,用于将第一网络请求中的数据保存至内存;发送单元,用于发送对于第一网络请求的第二网络响应,第二网络响应指示调用第一业务模块的结果;日志打印单元,用于根据保存的第一网络请求中的数据打印入口日志,且根据第二网络响应中的数据打印出口日志。
在一种实现方式下,第一网络请求来自于第三业务模块,第三业务模块属于目标调用链;装置还包括发送单元,用于基于第一业务模块运行错误或第一网络响应中携带有错误标识,向第三业务模块发送对于第一网络请求的携带有错误标识的第二网络响应,以使得第三业务模块打印日志。
在一种实现方式下,接收单元,还用于接收第三网络请求,第三网络请求用于调用第一业务模块;日志打印单元,还用于基于第一业务模块在处理第三网络请求的过程中未运行错误,且接收到的第三网络响应中不包含错误标识,不打印日志。
在一种实现方式下,接收单元,还用于接收第三网络请求,第三网络请求用于调用第一业务模块;日志打印单元,还用于基于第一业务模块在处理第三网络请求的过程中未运行错误,且接收到的第三网络响应中不包含错误标识,打印日志;第一业务模块未运行错误,接收到的第三网络响应中不包含错误标识,且在预设第二周期内,第一业务模块打印的日志数量小于第二预设数量。
在一种实现方式下,目标调用链用于处理客户端发送的特定类型业务请求,特定类型业务请求包括第一业务请求;第一网络请求是第一业务模块在目标调用链处理第一业务请求的过程中接收到的。
在一种实现方式下,目标调用链属于目标业务系统,目标业务系统还包括日志管理模块,特定类型业务请求还包括第二业务请求,目标调用链还包括第四业务模块;
日志管理模块包括:第一获取单元,用于获取在目标调用链处理第一业务请求的过程中,目标调用链中业务模块打印的日志;
第二获取单元,用于基于目标调用链中业务模块打印的日志中未包含第四业务模块打印的日志,获取第四业务模块在目标调用链处理第二业务请求的过程中打印的日志,以对目标调用链处理第一业务请求的过程进行分析,第四业务模块在目标调用链处理第二业务请求的过程中打印的日志指示,在目标调用链处理第二业务请求的过程中目标调用链中不存在运行错误的业务模块。
在一种实现方式下,在目标调用链已处理的特定类型业务请求的所有业务请求中,第二业务请求的请求时间早于且最接近第一业务请求的请求时间。
本申请实施例第三方面提供一种服务器,包括:至少一个处理器和存储器,存储器存储有可在处理器上运行的计算机执行指令,当所述计算机执行指令被所述处理器执行时,该服务器执行如上述第一方面中任意一种实施方式所述的打印日志的方法。
本申请实施例第四方面提供一种芯片或者芯片系统,该芯片或者芯片系统包括至少一个处理器和通信接口,通信接口和至少一个处理器通过线路互联,至少一个处理器用于运行计算机程序或指令,以执行如上述第一方面中任意一种实施方式所述的打印日志的方法。
本申请实施例第五方面提供了一种计算机存储介质,该计算机存储介质用于储存为上述服务器所用的计算机软件指令,其包括用于执行为服务器所设计的程序;
该服务器可以如前述第二方面所描述的打印日志的装置。
本申请实施例第六方面提供了一种计算机程序产品,该计算机程序产品包括计算机软件指令,该计算机软件指令可通过处理器进行加载来实现上述第一方面中任意一种实施方式所述的打印日志的方法。
本申请实施例第七方面提供了一种业务系统,包括目标调用链,目标调用链中包含第一业务模块;第一业务模块用于执行如上述第一方面中任意一种实施方式的打印日志的方法。
在一种实现方式下,目标调用链中还包括第四业务模块,业务系统还包括日志管理模块;目标调用链用于处理客户端发送的特定类型业务请求,特定类型业务请求包括第一业务请求和第二业务请求;第一网络请求是第一业务模块在目标调用链处理第一业务请求的过程中接收到的。
日志管理模块用于,获取在目标调用链处理第一业务请求的过程中,目标调用链中业务模块打印的日志;且基于目标调用链中业务模块打印的日志中未包含第四业务模块打印的日志,获取第四业务模块在目标调用链处理第二业务请求的过程中打印的日志,以对目标调用链处理第一业务请求的过程进行分析,第四业务模块在目标调用链处理第二业务请求的过程中打印的日志指示,在目标调用链处理第二业务请求的过程中目标调用链中不存在运行错误的业务模块。
采用第四业务模块在目标调用链处理第二业务请求的过程中打印的正确日志,对目标调用链处理第一业务请求的过程进行分析,以避免在对目标调用链处理第一业务请求的过程进行分析时,误认为在目标调用链处理第一业务请求的过程中,第四业务模块运行错误,从而提高日志分析的准确度。
在一种实现方式下,在目标调用链已处理的特定类型业务请求的所有业务请求中,第二业务请求的请求时间早于且最接近第一业务请求的请求时间。
在目标调用链已处理的特定类型业务请求的所有业务请求中,第二业务请求的请求时间早于且最接近第一业务请求的请求时间,使得日志管理模块获取到的正确日志更接近于,第四业务模块在目标调用链处理第一业务请求的过程中打印的正确日志,从而提高分析目标调用链处理第一业务请求的过程的准确性,避免日志管理模块选择的正确日志与第四业务模块在目标调用链处理第一业务请求的过程中打印的正确日志相差较大,而影响对目标调用链处理第一业务请求的过程的分析。
附图说明
图1为本申请实施例中业务系统的架构示意图;
图2为本申请实施例中调用链处理特定类网络请求的过程示意图;
图3(a)为本申请实施例中打印日志的方法的一个实施例示意图;
图3(b)为本申请实施例中打印日志的方法的另一个实施例示意图;
图4为本申请实施例中第一业务模块处理第一网络请求的一个实施例示意图;
图5为本申请实施例中第一业务模块处理第一网络请求的另一个实施例示意图;
图6为本申请实施例中集成有Tracer单元的第一业务模块的实施例示意图;
图7为本申请实施例提供的一种打印日志的装置的一个实施例示意图;
图8为本申请实施例中服务器的结构示意图;
图9为本申请实施例提供的一种业务系统的实施例示意图。
具体实施方式
本申请实施例提供了一种打印日志的方法、装置及系统,用于控制日志的打印,从而减少日志的打印数量,以避免打印日志而占用大量的资源。
本申请实施例可以应用于包括至少一个服务器的业务系统。每个服务器上可以部署至少一个业务模块。当需要在一个服务器上部署有多个业务模块时,可以在该服务器上部署多个虚拟机,每个虚拟机中安装有一个操作系统,该虚拟机又可以称为节点,然后在每个节点中部署一个或多个业务模块。
例如,请参阅图1,本申请实施例中业务系统的架构示意图。图1中的业务系统包括三个服务器,其中一个服务器上部署有一个业务模块A,一个服务器上部署有业务模块B和业务模块C,另一个服务器上部署有业务模块D和业务模块E;这5个业务模块构成一条调用链,用于处理来自客户端(例如可以是浏览器)的网络请求。
通常情况下,不同的调用链用于处理来自客户端的不同类型的网络请求,来自客户端的网络请求具体可以叫做业务请求,所以也可以理解为,每条调用链用于处理来自客户端的特定类型业务请求。本申请实施例对特定类型业务请求不做具体限定,例如具体可以是登录请求、支付请求或者账户查询请求等等。
下面结合图2对调用链处理特定类型业务请求的过程进行说明。如图2所示,用户在客户端上操作,触发客户端向图1中的业务系统发送登录请求,其中该登录请求被业务模块A接收到;业务模块A向业务模块B发送登录认证请求;业务模块B在接收到登录认证请求后,向业务模块C发送认证请求;业务模块C在接收到认证请求后,向业务模块D发送获取用户信息的请求;业务模块D在接收到获取用户信息的请求后,向业务模块E发送获取用户信息的请求。
业务模块E在接收到获取用户信息的请求后,向业务模块D发送对于网络获取用户信息的请求的网络响应;业务模块D在接收到来自业务模块E的网络响应后,向业务模块C发送获取用户信息的请求的网络响应;业务模块C在接收到来自业务模块D的网络响应后,向业务模块B发送认证请求的网络响应;业务模块B在接收到业务模块C发送的网络响应后,向业务模块A发送对于登录认证请求的网络响应;最终,业务模块A在接收到来自业务模块B的网络响应后,向客户端发送对于登录请求的网络响应。
可以理解的是,图2所示的调用链仅包含A-E这样5个业务模块,且这5个业务模块间的调用关系较为简单。其中,一个业务模块向另一个业务模块发送网络请求,并接收来自该另一个业务模块的对于该网络请求的网络响应的过程,称为业务模块的调用过程,而这两个业务模块之间的关系则称为调用关系。而在实际应用中,调用链中包含的业务模块的数量较多,并且调用关系可能较为复杂。例如,业务模块B在接收到业务模块A的登录认证请求后,除了调用业务模块C外,还可以调用其他业务模块。即一个业务模块可以与多个业务模块之间存在调用关系。
因此,为了更准确地定位调用链出现问题的业务模块,则需要业务模块在被调用的过程中打印各自的日志,最终通过分析调用链中各业务模块打印的日志,来定位出现问题的业务模块。
下面对业务模块打印日志的过程进行说明。打印日志是指业务模块将内存中记录的业务模块操作的数据保存至存储器中。打印日志包括打印入口日志和打印出口日志,具体地,业务模块打印入口日志是指业务模块将接收到的网络请求中的数据保存到存储器中;业务模块打印出口日志是指业务模块将发送的网络响应中的数据保存到存储器中。
其中,网络请求中的数据可以包括追踪标识TraceId、接收到网络请求的时间以及网络响应标识等;同样地,网络响应中的数据也可以包括追踪标识TraceId、接收到网络响应的时间以及网络响应标识等。
其中,TraceId是全局唯一的,用于标记客户端发出的每个网络请求,客户端发出的每个网络请求中都携带有不同的TraceId。例如,在图2所示的调用链中,业务模块A接收到来自客户端的多个网络请求,则每个网络请求中包含的TraceId都不同。并且,业务模块A在接收到网络请求后,会将网络请求中的TraceId添加至发送给业务模块B的网络请求中,而业务模块B也会在向业务模块A发送的网络响应中添加该TraceId。
因此,若客户端发出一个特定类型业务请求,则在调用链处理该特定类型业务请求的过程中,调用链中每个业务模块发送的网络请求、接收的网络请求、发送的网络响应以及接收的网络响应中都会携带用于标记特定类型业务请求的TraceId。
网络响应标识用于表示网络请求当前的状态,例如,若网络响应标识取值为200,则表示该网络请求当前的状态为成功;若网络响应标识取值为404,则表示该网络请求当前的状态为无网络响应。
可以理解的是,对于某一调用链,往往需要处理大量的特定类型业务请求,所以若对于每个特定类型业务请求,调用链中的各个业务模块均打印日志(包括入口日志和出口日志),那么调用链中的业务模块必然会打印大量的日志,从而会占用大量的内存、输入/输出(Input/Output,I/O)以及中央处理器(Central Processing Unit,CPU)等资源。
为此,本申请实施例提供了一种打印日志的方法,该方法能够识别出调用链中存在运行错误的业务模块这一情况,并在调用链中存在运行错误的业务模块的情况下打印日志,这样既不影响对出现问题的业务模块的定位,又能实现对日志打印的控制,从而可以减少日志打印数量,降低日志打印对资源的占用。
具体地,请参阅图3(a),本申请实施例中打印日志的方法的实施例示意图。如图3(a)所示,本申请实施例提供了一种打印日志的方法的一个实施例,包括:
步骤101,第一业务模块接收第一网络请求,第一网络请求用于调用第一业务模块。
可以理解的是,调用链中的每个业务模块在被调用时,都会接收到网络请求;例如,图2所示的调用链中的各个业务模块都会接收到网络请求。
作为目标调用链包含的多个业务模块中的一个,第一业务模块在被调用的过程中同样会接收到第一网络请求,该第一网络请求可以来自于客户端,也可以来自于目标调用链中的其他业务模块;以图2所示的调用链为例,当第一业务模块为业务模块A时,第一网络请求则来自于客户端;当第一业务模块为业务模块B时,第一网络请求则来自于业务模块A。
基于前述说明可知,第一网络请求可以包括追踪标识TraceId、接收到网络请求的时间以及网络响应标识等。
步骤102,基于第一业务模块在处理第一网络请求的过程中运行错误,或基于第一业务模块接收的来自第二业务模块的第一网络响应中携带有错误标识,第一业务模块打印日志。
其中,第一网络响应是对于第二网络请求的,第二网络请求是第一业务模块处理第一网络请求的过程中为调用第二业务模块而发送的,第一业务模块和第二业务模块属于目标调用链,错误标识指示目标调用链中存在运行错误的业务模块。
需要说明的是,第一业务模块处理第一网络请求的过程包括两种情况,下面结合图4和图5对这两种情况进行介绍。
第一种情况:如图4所示,第一业务模块在接收到第一网络请求后先进行第一次内部运行,经过第一次内部运行后,第一业务模块向第二业务模块发送第二网络请求,第二网络请求用于调用第二业务模块;此后,第一业务模块会接收来自第二业务模块的第一网络响应,第一网络响应指示调用第二业务模块的结果。在接收到第一网络响应后,第一业务模块可以进行第二次内部运行(例如可以对第一网络响应进行处理),经过第二次内部运行后,第一业务模块向第二业务模块发送对于第一网络请求的第二响应。
其中,若第一业务模块为图2所示的调用链中的业务模块A、业务模块B、业务模块C和业务模块D中的一个,则第一业务模块处理第一网络请求的过程属于上述第一种情况。
在上述第一种情况下,若第一业务模块第一次运行错误或第一网络请求中携带有错误标识,此时的错误标识具体表示目标调用链中先于第一业务模块被调用的业务模块中存在运行错误的业务模块,第一业务模块会在第二网络请求中添加错误标识;同样地,若第二业务模块在接收到第一网络请求后第一次运行错误,或第二业务模块接收到的第二网络请求中携带有错误标识,则第二业务模块也会在向其他业务模块发送的网络请求中添加错误标识。例如,若业务模块B接收到的来自业务模块A的网络请求中携带有错误标识,则表示业务模块A运行错误;若业务模块C接收到的来自业务模块B的网络请求中携带有错误标识,则表示业务模块B运行错误或业务模块A运行错误。
在上述第一种情况下,第一业务模块可以在运行错误时打印日志,也可以在接收到的第一网络响应种携带有错误标识的情况下打印日志。其中,第一业务模块运行错误包括第一业务模块在接收到第一网络请求后第一次内部运行错误,也包括在接收到第一网络响应后第二次内部运行错误。
第二种情况:如图5所示,第一业务模块在接收到第一网络请求后内部运行,经过内部运行后,第一业务模块发送对于第一网络请求的第二响应,即第一业务模块未调用目标调用链中的业务模块。
第二种情况也存在至少两个应用场景。其中一个应用场景可以是,第一业务模块为调用链中的最后一个业务模块,所以第一业务模块不需调用其他业务模块即可完成对第一网络请求的处理,例如,第一业务模块可以为图2所示的调用链中的业务模块E。另一个应用场景可以是,第一业务模块内部运行错误或第一网络请求中携带错误标识,此时,第一业务模块无需调用其他业务模块,便直接发送对于第一网络请求的第二响应,以指示发送第一网络请求的客户端或业务模块目标调用链中存在运行错误的业务模块。
其中,若第一网络请求中携带错误标识,则表示第一网络请求中的数据存在错误,通常会导致第一业务模块内部运行错误,因此本申请实施例将第一网络请求中携带有错误标识的情况作为第一业务模块内部运行错误的一种特殊情况。
基于此,在上述第二种情况下,第一业务模块可以在运行错误时打印日志。其中,第一业务模块运行错误包括第一业务模块在接收到第一网络请求后内部运行错误。
错误标识的形式可以有多种,本申请实施例对此不做具体限定。例如,可以在第一响应中添加一个新的字段,当该字段用于表示目标调用链中是否存在运行错误的业务模块;具体地,当该字段的值为true时,则表示目标调用链中存在运行错误的业务模块,当该字段的值为false时,则表示目标调用链中不存在运行错误的业务模块。
在本申请实施例中,识别目标调用链中存在运行错误的业务模块的情况下,打印日志,能够起到控制日志打印的作用,从而减少日志的打印数量,以避免打印日志而占用大量的资源;也不会因盲目减少日志打印数量而影响对出问题的业务模块的定位。
可以理解的是,若某种原因导致目标调用链中某一业务模块运行错误,那么在一段时间该业务模块可能因该原因持续运行错误,所以在该段时间内,目标调用链中的各个业务模块都会持续打印日志;由于在该段时间内,导致业务模块运行错误的原因相同,所以仅通过一定量的日志便可以定位出现问题的业务模块,并确定业务模块运行错误的原因。
因此,本申请实施例对第一业务模块在目标调用链中存在运行错误的业务模块的情况下打印的日志数量进行控制。作为一种可选的方式,预设第一周期内,第一业务模块在目标调用链中存在运行错误的业务模块的情况下,打印的日志数量小于第一预设数量。
其中,第一周期可以根据实际需要进行设定,例如可以为一分钟;第一预设数量也可以根据实际需要进行设定,例如可以设置为5、6、7和8等。
在本申请实施例中,控制第一业务模块在第一周期内,且在目标调用链中存在运行错误的业务模块的情况下打印的日志数量,从而防止在第一周期内,由于同一原因导致某一业务模块运行错误,以致于第一业务模块打印大量的日志;因此,本申请实施例能够在不对定位运行错误的业务模块造成影响的前提下,起到控制第一业务模块打印日志数量的作用。
需要说明的是,控制预设第一周期内第一业务模块打印的日志数量小于第一预设数量的方法有多种,本申请实施例对此不做具体限定。示例性地,在目标调用链中,由接收来自客户端的特定类型业务请求的业务模块对日志数量进行周期性地控制。具体地,在当前第一周期内,接收来自客户端的特定类型业务请求的业务模块在调用另一个业务模块的过程中,在向另一个业务模块发送的网络请求中添加剩余的错误日志数量;当该另一个业务模块需要调用其他业务模块时,也同样在发送给其他业务模块的网络请求中添加该剩余的错误日志数量,以此类推,目标调用链中的每个业务模块都会接收到剩余的错误日志数量。
在目标调用链中存在运行错误的业务模块的情况下,若剩余的错误日志数量大于0,则目标调用链中的业务模块便可以打印日志。其中,在当前第一周期内,接收来自客户端的特定类型业务请求的业务模块,每接收到一个来自客户端的特定类型业务请求,便将剩余的错误日志数量减1,直至为0。在目标调用链中存在运行错误的业务模块的情况下,若剩余的错误日志数量等于0,则目标调用链中的业务模块不打印日志。
在下一个第一周期到来时,接收来自客户端的特定类型业务请求的业务模块,会将剩余的错误日志数量更新为第一预设数量,从而实现对日志数量的周期性控制。
以图2所示的调用链为例,业务模块A在接收到来自客户端的网络请求后,在向业务模块B发送的网络请求中添加剩余的错误日志数量,其中剩余的错误日志数量的初始值为第一预设数量,这里假设第一预设数量为5;相应地,业务模块B会接收到剩余的错误日志数量(为5),业务模块B可以根据该剩余的错误日志数量判断是否打印日志。具体地,在业务模块B运行错误或业务模块B接收到来自业务模块C的网络响应中携带有错误标识的情况下,由于剩余的错误日志数量为5,大于0,所以业务模块B打印日志。
同样地,在业务模块B调用业务模块C的过程中,业务模块B会在向业务模块C发送的网络请求中添加剩余的错误日志数量(为5),以使得业务模块C根据剩余的错误日志数量判断是否打印日志。其中,业务模块C判断是否打印日志的方法与业务模块B相同,具体可参阅前述业务模块B的判断过程进行理解。
业务模块A再次接收到来自客户端的网络请求后,则在向业务模块B发送的网络请求中添加的剩余的错误日志数量则会变为4。随着业务模块A接收到的来自客户端的网络请求的数量的增多,添加的剩余的错误日志数量则会依次减少。当剩余的错误日志数量减少至0时,即使业务模块B运行错误或业务模块B接收到来自业务模块C的网络响应中携带有错误标识,业务模块B也不打印日志。
业务模块A每隔一分钟(即更新剩余的错误日志数量的周期)则会将剩余的错误日志数量更新为第一预设数量。
基于前述说明可知,第一业务模块打印日志包括打印入口日志和打印出口日志,下面对打印日志的过程进行说明。
如图3(a)所示,在本申请实施例提供的打印日志的方法的另一个实施例中,在第一业务模块接收第一网络请求之后,方法还包括:
步骤103,第一业务模块保存第一网络请求中的数据至内存。
其中,步骤103是在执行步骤101之后执行。若第一业务模块向第二业务模块发送第二网络请求,则步骤103是在第一业务模块发送第二网络请求之前执行。
在本申请实施例中,第一业务模块在接收到第一网络请求后,会将第一网络请求中的数据保存至内存,以防止第一网络请求中的数据被清除。
其中,在将第一网络请求中的数据保存至内存前,可以先对第一网络请求中的数据进行整理,本申请实施例对第一网络请求中的数据的整理方法不做具体限定。
步骤104,第一业务模块发送对于第一网络请求的第二网络响应,第二网络响应指示调用第一业务模块的结果。
其中,步骤104是在执行完步骤102后执行。
基于前述说明可知,第一业务模块在接收到第一网络请求后,可以通过内部运行对第一网络请求进行处理,根据处理的结果发送第二网络响应;第一业务模块也可以先进行第一次内部运行,然后向第二业务模块发送第二网络请求,并接收来自第二业务模块的第一网络响应,并根据第一网络响应进行第二次内部运行,以完成对第一网络请求的处理,最后根据处理的结果发送第二网络响应。
可以理解的是,若第一网络请求来自于客户端,则第一业务模块则向客户端发送第二网络响应;若第一网络请求来自于其他业务模块,则第一业务模块则向其他业务模块发送第二网络响应。
基于上述过程步骤102中,第一业务模块打印日志可以包括:
第一业务模块根据保存的第一网络请求中的数据打印入口日志。
其中,打印入口日志包括将保存的第一网络请求中的数据输出到存储器。
第一业务模块根据第二网络响应中的数据打印出口日志。
其中,打印出口日志包括将保存的第二网络响应中的数据输出到存储器。
需要说明的是,打印入口日志和打印出口日志之间无先后顺序。
在现有的打印日志的方法中,业务模块在接收到网络请求后,便打印入口日志,并在打印入口日志后向下一个业务模块发送网络请求以对下一个业务模块进行调用,此后,网络请求中的数据便会从内存中被清除。而在本申请实施例中,第一业务模块在接收到第一网络请求后,先不打印日志,而是将第一网络请求中的数据保存至内存;若第一业务模块在处理第一网络请求的过程中运行错误,或第一网络响应中携带有错误标识,第一业务模块才会根据保存的第一网络请求中的数据打印入口日志。
相比现有的打印日志的方法,在本申请实施例中,第一业务模块不是在向第二业务模块发送第二网络请求后清除第一网络请求中的数据,而是在打印入口日志和出口日志后,将内存中第一网络请求中的数据和第二网络响应中的数据清除。
在本申请实施例中,第一业务模块在接收到第一网络请求后,先不打印日志,而是将第一网络请求中的数据保存至内存;当第一业务模块在处理第一网络请求的过程中运行错误,或第一网络响应中携带有错误标识时,第一业务模块根据保存的第一网络请求中的数据打印入口日志,从而避免在未确定目标调用链中存在运行错误的业务模块的情况下打印入口日志,造成资源浪费。
基于前述说明可知,第一网络请求可以来自于业务模块,也可以来自于客户端。下面对第一网络请求来自于业务模块的情况进行说明。
在本申请实施例提供的打印日志的方法的另一个实施例中,第一网络请求来自于第三业务模块,第三业务模块属于目标调用链;第一业务模块发送对于第一网络请求的第二网络响应包括:
基于第一业务模块运行错误或第一网络响应中携带有错误标识,第一业务模块向第三业务模块发送对于第一网络请求的携带有错误标识的第二网络响应,以使得第三业务模块打印日志。
可以理解的是,第三业务模块在接收到携带有错误标识的第二网络响应后,会打印日志,其中,第三业务模块打印日志的过程与第一业务模块打印日志的过程相同,故在此不做赘述。
上文对第一业务模块运行错误,或第一业务模块接收的第一网络响应中携带有错误标识的情况下,第一业务模块打印日志的过程进行了说明,下面对第一业务模块未运行错误且接收到的网络响应中未携带有错误标识的情况下,第一业务模块打印日志的过程进行说明。
如图3(a)所示,基于前述各个实施例,在本申请实施例提供的打印日志的方法的另一个实施例中,该方法还包括:
步骤105,第一业务模块接收第三网络请求,第三网络请求用于调用第一业务模块。
其中,步骤105是在执行完步骤104后执行。
需要说明的是,第三网络请求与第一网络请求类似,具体可参照第一网络请求的相关说明对第三网络请求进行理解。
其中,第一业务模块在接收到第三网络请求后,会将第三网络请求中的数据保存至内存。
步骤106,基于第一业务模块在处理第三网络请求的过程中未运行错误,且接收到第三网络响应中不包含错误标识,第一业务模块不打印日志。
由于第一业务模块未运行错误,且接收到的第三网络响应中不包含错误标识,则表示目标调用链中不存在运行错误的业务模块;为了控制日志的打印数量,这种情况下,第一业务模块不打印日志。
第一业务模块在确定自身未运行错误,且接收到的第三网络响应中不包含错误标识后,可以清除保存的第三网络请求中的数据。
在本申请实施例中,在第一业务模块未运行错误,且接收到的第三网络响应中不包含错误标识的情况下,第一业务模块不打印日志,减少了日志打印数量,且不影响定位运行错误的业务模块;并且,由于多数时间内目标调用链中都不存在运行错误的业务模块,所以本申请实施例能够极大地减少日志的打印数量,明显降低打印日志对资源的占用。
可以理解的是,在定位运行错误的业务模块的过程中,可能需要在目标调用链中不存在运行错误的业务模块的情况下打印的日志作为参照,因此在目标调用链中不存在运行错误的业务模块的情况下,也可以打印部分日志;但为了避免打印大量的日志而占用资源,可以控制日志的打印数量。
下面结合图3(b)对第一业务模块在目标调用链中不存在运行错误的业务模块的情况下打印日志的过程进行介绍。具体地,作为一种可选的实现方式,该方法还包括:
步骤107,第一业务模块接收第三网络请求,第三网络请求用于调用第一业务模块。
需要说明的是,第三网络请求与第一网络请求是在目标调用链处理同一类型的业务请求的过程中接收到的,例如,第一网络请求为携带有错误标识的登录请求,而第三网络请求为未携带错误标识的登录请求;由于第三网络请求与第一网络请求类似,所以可参照第一网络请求的相关说明对第三网络请求进行理解。
步骤108,基于预设第二周期内,第一业务模块在处理第三网络请求的过程中未运行错误,且接收到的第三网络响应中不包含错误标识的情况下,第一业务模块已打印的日志数量小于第二预设数量,第一业务模块打印日志。可以理解的是,在预设第二周期内,若在处理第三网络请求的过程中未运行错误,且接收到的第三网络响应中不包含错误标识的情况下,若第一业务模块已打印的日志数量等于第二预设数量,则会停止打印日志。
在本申请实施例中,在目标调用链中不存在运行错误的业务模块的情况下,第一业务模块打印日志,但在预设第二周期内,第一业务模块在上述情况下打印的日志数量小于第二预设数量,从而可以控制日志的打印数量。
其中,控制第一业务模块打印的日志数量小于第二预设数量的方法,与控制第一业务模块打印的日志数量小于第一预设数量的方法相同,具体可参照前述对控制第一业务模块打印的日志数量小于第一预设数量的方法的说明进行理解。
第二周期也可以根据实际需要进行设定,例如也可以为一分钟;第二预设数量也可以根据实际需要进行设定,例如可以设置为1。
需要说明的是,在目标调用链中不存在运行错误的业务模块的情况下,第一业务模块可以通过步骤105和步骤106对日志打印进行控制,也可以通过步骤107和步骤108对日志打印进行控制。
基于前述说明可知,目标调用链用于处理客户端发送的特定类型业务请求,而该特定类型业务请求的数量可以为多个;作为一种可选的方式,目标调用链属于目标业务系统,且用于处理客户端发送的特定类型业务请求,目标业务系统还包括日志管理模块,特定类型业务请求包括第一业务请求和第二业务请求,目标调用链还包括第四业务模块。
第一网络请求是第一业务模块在目标调用链处理第一业务请求的过程中接收到的;可以理解的,第一网络请求可以是来自客户端的第一业务请求,也可以是来自其他业务模块的网络请求。
应理解,通常会根据在目标调用链处理第一业务请求的过程中,目标调用链中各个业务模块打印的日志,来对目标调用链处理第一业务请求的过程进行分析,以定位运行错误的业务模块。在分析前,需要先获取在目标调用链处理第一业务请求的过程中,目标调用链中各个业务模块打印的日志。
基于前述说明可知,TraceId是全局唯一的,用于标记客户端发出的每个网络请求,而目标调用链中各个业务模块打印的日志中通常包含TraceId;因此,可以根据TraceId获取在目标调用链处理第一业务请求的过程中,目标调用链中各个业务模块打印的日志。
基于上述说明,本申请实施例中打印日志的方法还包括:
日志管理模块获取在目标调用链处理第一业务请求的过程中,目标调用链中业务模块打印的日志。
需要说明的是,日志管理模块获取目标调用链中各个业务模块打印的日志,以组成完整的目标调用链的日志,所以通常情况下,日志管理模块获取到的业务模块打印的日志会包含第一业务模块打印的日志以及第四业务模块打印的日志。然而,存在至少两种原因可能导致,目标调用链中业务模块打印的日志中未包含第四业务模块打印的日志。
第一种原因是,在目标调用链处理第一业务请求的过程中,第四业务模块未被调用。例如,以图2所示的调用链为例,若业务模块C运行错误,则业务模块C可能直接向业务模块B发送网络响应,而不向业务模块D发送网络请求;因此业务模块D和业务模块E都不会被调用,那么日志管理模块获取的目标调用链中业务模块打印的日志则包含业务模块C打印的日志,而不包含业务模块D和业务模块E印的日志。
第二种原因是,在目标调用链处理第一业务请求的过程中,第四业务模块未运行错误且接收到的网络响应中不包含错误标识。例如,以图2所示的调用链为例,业务模块D未运行错误,且接收到来自业务模块E的网络响应中不包含错误标识,则业务模块D不打印日志;然而业务模块C在接收到来自业务模块D的网络响应后运行错误,则业务模块C会打印日志。最终,日志管理模块获取的目标调用链中业务模块打印的日志则业务模块C打印的日志,而不包含业务模块D打印的日志。
基于目标调用链中业务模块打印的日志中未包含第四业务模块打印的日志,日志管理模块获取第四业务模块在目标调用链处理第二业务请求的过程中打印的日志,第四业务模块在目标调用链处理第二业务请求的过程中打印的日志指示在目标调用链处理第二业务请求的过程中目标调用链中不存在运行错误的业务模块,且用于对目标调用链处理第一业务请求的过程进行分析。
基于前述说明可知,存在多种原因会导致目标调用链中业务模块打印的日志中未包含第四业务模块打印的日志,无论是上述第一种原因,还是上述第二种原因,都不是第四业务模块造成目标调用链中出现运行错误的业务模块。若采用第四业务模块在目标调用链中存在运行错误的业务模块的情况下打印的日志,对目标调用链处理第一业务请求的过程进行分析,则可能误认为在目标调用链处理第一业务请求的过程中,第四业务模块运行错误。
因此,本申请实施例采用第四业务模块在目标调用链处理第二业务请求的过程中打印的日志,对目标调用链处理第一业务请求的过程进行分析,以避免影响对目标调用链处理第一业务请求的过程的分析结果。
可以理解的是,在目标调用链已处理的特定类型业务请求的所有业务请求中,存在多个业务请求在被处理的过程中,目标调用链中不存在运行错误的业务模块。
然而,为了完善目标调用链,通常会对目标调用链中的业务模块进行调整,例如可以对目标调用链中的业务模块进行功能完善。基于此,目标调用链在处理不同的业务请求的过程中,由于业务模块发生了改变,即使目标调用链中都不存在运行错误的业务模块,那么该业务模块打印的日志也可能不同。所以,若使用目标调用链在处理一个的业务请求的过程中业务模块打印的日志,分析目标调用链处理另一个的业务请求的过程,则可能影响分析结果。
因此,为了尽可能避免获取到的第四业务模块在目标调用链处理第二业务请求的过程中打印的日志,影响第一业务模块对目标调用链处理第一业务请求的过程的分析结果,在本申请实施例提供的打印日志的方法的另一个实施例中,在目标调用链已处理的特定类型业务请求的所有业务请求中,第二业务请求的请求时间早于且最接近第一业务请求的请求时间。
以图2所示的调用链为例,假设业务模块A先后接收到来自客户端的三个业务请求,分别为业务请求M、业务请求N和业务请求K;在处理业务请求M和业务请求N的过程中,调用链中均不存在运行错误的业务模块,而在处理业务请求K的过程中,调用链中存在运行错误的业务模块。
若日志管理模块获取的在调用链处理业务请求K的过程中打印的日志中,不包含业务模块D打印的日志,则日志管理模块会选择在调用链处理业务请求N的过程中业务模块D打印的日志,对调用链处理业务请求K的过程进行分析,而不会选择在调用链处理业务请求M的过程中业务模块D打印的日志,对调用链处理业务请求K的过程进行分析。
在本申请实施例中,在目标调用链已处理的特定类型业务请求的所有业务请求中,第二业务请求的请求时间早于且最接近第一业务请求的请求时间,使得日志管理模块获取到的正确日志更接近于,第四业务模块在目标调用链处理第一业务请求的过程中打印的正确日志,使得对目标调用链处理第一业务请求的过程的分析更加准确,避免日志管理模块选择的正确日志与第四业务模块在目标调用链处理第一业务请求的过程中打印的正确日志相差较大,而影响对目标调用链处理第一业务请求的过程的分析。
基于前述说明可知,本申请实施例中的第一业务模块与现有的业务模块不同,本申请实施例中的第一业务模块不仅用于处理接收到网络请求,还用于控制日志的打印。第一业务模块在控制日志打印的过程中,可以执行以下操作中的至少一种。
例如,本申请实施例中的第一业务模块在第一网络响应中携带有错误标识或第一业务模块运行错误的情况下打印日志。具体过程可参阅前述实施例中的相关说明。
例如,本申请实施例中的第一业务模块控制在预设第一周期内,且在第一业务模块在目标调用链中存在运行错误的业务模块的情况下,打印的日志数量小于第一预设数量。具体控制过程可参阅前述实施例中的相关说明。
例如,本申请实施例中的第一业务模块在第一网络响应中不包含错误标识且第一业务模块未运行错误的情况下不打印日志。
例如,本申请实施例中的第一业务模块在第一网络响应中不包含错误标识且第一业务模块未运行错误的情况下打印日志,并控制在预设第二周期内,且在第一业务模块在目标调用链中不存在运行错误的业务模块的情况下,第一业务模块打印的日志数量小于第二预设数量。具体控制过程可参阅前述实施例中的相关说明。
为了使第一业务模块能够执行上述操作中的至少一种,示例性地,如图6所示,可以在图4所示的第一业务模块内集成一个追踪Tracer单元,同样地,也可以在图5所示的第一业务模块内集成该Tracer单元;由该Tracer单元负责执行上述操作中的至少一种,以实现对日志打印的控制。
目标调用链中的其他业务模块与第一业务模块类似,也在集成上述Tracer单元,具体不做详述。
为了更好地理解本申请实施例提供的打印日志的方法,下面提供了关于图3的一具体应用例。该应用例包括两种场景。
第一种场景:
第一步,第三业务模块发送第一网络请求,第一业务模块接收该第一网络请求。
该第一网络请求中包含的参数如下:WTraceRemains=4,RTraceRemains=1,WrongFlag=fasle,Times=1577084066659,Response=200,TraceId=eac290b095464ae5b4ebc754266a015a。
其中,WTraceRemains=4表示剩余的错误日志数量为4,RTraceRemains=1表示剩余的正确日志数量为1,WrongFlag=fasle表示调用链中不存在运行错误的业务模块,Times=1577084066659表示业务模块A接收到的网络请求的时间为1577084066659,Response=200是指网络响应标识取值为200,具体表示业务模块A接收到的网络请求当前的状态为成功,eac290b095464ae5b4ebc754266a015a是业务模块A接收到的网络请求的TraceId。
第二步,第一业务模块将第一网络请求中的数据保存至内存,但先不打印入口日志。
具体地,第一模块将WTraceRemains=4,WrongFlag=fasle,Times=1577084066659,Response=200以及TraceId=eac290b095464ae5b4ebc754266a015a保存至内存。
第三步,第一业务模块通过内部运行,对第一网络请求进行处理。
第四步,在内部运行后,为了调用第二业务模块,第一业务模块向第二业务模块发送第二网络请求。
具体地,由于WrongFlag=fasle表示第一网络请求中不包含错误标识,所以若第一业务模块未运行错误,则第二网络请求包含WTraceRemains=4,WrongFlag=fasle,Times=1577084066659,Response=200,TraceId=eac290b095464ae5b4ebc754266a015a;若第一业务模块运行错误,则第二网络请求包含WTraceRemains=4,WrongFlag=true,Times=1577084066659,Response=200,TraceId=eac290b095464ae5b4ebc754266a015a,其中WrongFlag=true表示调用链中存在运行错误的业务模块。
第二业务模块在接收到第二网络请求后,会对第二网络请求进行处理,然后向第一业务模块发送第一网络响应。
第五步,第一业务模块接收来自第二业务模块的第一网络响应。
一种情况,第一网络响应中包含WTraceRemains=4,WrongFlag=fasle,Times=1577084066659,Response=200,TraceId=eac290b095464ae5b4ebc754266a015a。另一种情况,第一网络响应中包含WTraceRemains=4,WrongFlag=true,Times=1577084066659,Response=200,TraceId=eac290b095464ae5b4ebc754266a015a。
第六步,第一业务模块通过内部运行对第一网络响应进行处理。
第七步,基于第一业务模块在处理第一网络请求的过程中运行错误,或基于第一业务模块接收的来自第二业务模块的第一网络响应中携带有错误标识,第一业务模块打印日志。
具体地,若第一业务模块内部运行错误,或第一网络响应中包含参数WrongFlag=true,则表示第一业务模块需要打印日志类型为错误日志。此时,又因为WTraceRemains=4,说明第一业务模块可以打印的错误日志的数量为4,所以第一业务模块根据保存的第一网络请求中的参数打印入口日志,根据第一网络响应中的参数打印出口日志。在打印完入口日志和出口日志后,第一业务模块会将第一网络请求中的参数和第二网络请求中的参数从内存中清除。
第八步,第一业务模块向第三业务模块发送对于第一网络请求的第二网络响应。
具体地,由于第一业务模块内部运行错误,或第一网络响应中包含参数WrongFlag=true,所以第二网络响应中包含WTraceRemains=4,WrongFlag=true,Times=1577084066659,Response=200,TraceId=eac290b095464ae5b4ebc754266a015a。
第二种场景:
第一步,第三业务模块发送第三网络请求,第一业务模块接收该第三网络请求。
其中,第三网络请求中的参数与第一种场景中第一网络请求中的参数相同。
同样地,第一业务模块将第三网络请求中的数据保存至内存,但先不打印入口日志;然后第一业务模块通过内部运行,对第三网络请求进行处理。在内部运行后,第一业务模块调用第二业务模块,在调用第二业务模块及后续业务模块的调用过程中,都未出现运行错误的业务模块。这种情况下,第一业务模块会接收到来自第二业务模块的第三网络响应,且第三网络响应中不包含错误标识。
上述过程与第一种场景中的过程类似,具体参阅第一种场景中的说明进行理解。
第二步,基于第一业务模块在处理第三网络请求的过程中未运行错误,且接收到的第三网络响应中不包含错误标识,第一业务模块不打印日志。
其中,第三网络响应中包含WTraceRemains=4,WrongFlag=fasle,Times=1577084066659,Response=200,TraceId=eac290b095464ae5b4ebc754266a015a。
第三步,第一业务模块向第三业务模块发送对于第三网络请求的网络响应。
具体地,基于第一业务模块内部运行未发生错误,且第一网络响应中包含参数WrongFlag=fasle,所以第二网络响应中包含WTraceRemains=4,WrongFlag=fasle,Times=1577084066659,Response=200,TraceId=eac290b095464ae5b4ebc754266a015a。请参阅图7,本申请实施例提供的一种打印日志的装置的一个实施例示意图,装置包括:
接收单元301,用于接收第一网络请求;
日志打印单元302,用于基于在处理第一网络请求的过程中运行错误,或基于接收的来自第二业务模块的对于第二网络请求的第一网络响应中携带有错误标识,打印日志,第二网络请求是处理第一网络请求的过程中为调用第二业务模块而发送的,第二业务模块属于目标调用链,错误标识指示目标调用链中存在运行错误的业务模块。
在一种实现方式下,预设第一周期内,第一业务模块在目标调用链中存在运行错误的业务模块的情况下,打印的日志数量小于第一预设数量。
在一种实现方式下,装置还包括:保存单元303,用于将第一网络请求中的数据保存至内存;发送单元,用于发送对于第一网络请求的第二网络响应,第二网络响应指示调用第一业务模块的结果;日志打印单元,用于根据保存的第一网络请求中的数据打印入口日志,且根据第二网络响应中的数据打印出口日志。
在一种实现方式下,第一网络请求来自于第三业务模块,第三业务模块属于目标调用链;装置还包括发送单元304,用于基于第一业务模块运行错误或第一网络响应中携带有错误标识,向第三业务模块发送对于第一网络请求的携带有错误标识的第二网络响应,以使得第三业务模块打印日志。
在一种实现方式下,接收单元301,还用于接收第三网络请求,第三网络请求用于调用第一业务模块;日志打印单元302,还用于基于第一业务模块在处理第三网络请求的过程中未运行错误,且接收到的第三网络响应中不包含错误标识,不打印日志。
在一种实现方式下,接收单元301,还用于接收第三网络请求,第三网络请求用于调用第一业务模块;日志打印单元302,还用于基于第一业务模块在处理第三网络请求的过程中未运行错误,且接收到的第三网络响应中不包含错误标识,打印日志;第一业务模块未运行错误,接收到第三网络响应中不包含错误标识,且在预设第二周期内,第一业务模块打印的日志数量小于第二预设数量。
在一种实现方式下,目标调用链用于处理客户端发送的特定类型业务请求,特定类型业务请求包括第一业务请求;第一网络请求是第一业务模块在目标调用链处理第一业务请求的过程中接收到的。
在一种实现方式下,目标调用链属于目标业务系统,目标业务系统还包括日志管理模块,特定类型业务请求还包括第二业务请求,目标调用链还包括第四业务模块;
日志管理模块包括:第一获取单元,用于获取在目标调用链处理第一业务请求的过程中,目标调用链中业务模块打印的日志;
第二获取单元,用于基于目标调用链中业务模块打印的日志中未包含第四业务模块打印的日志,获取第四业务模块在目标调用链处理第二业务请求的过程中打印的日志,以对目标调用链处理第一业务请求的过程进行分析,第四业务模块在目标调用链处理第二业务请求的过程中打印的日志指示,在目标调用链处理第二业务请求的过程中目标调用链中不存在运行错误的业务模块。
在一种实现方式下,在目标调用链已处理的特定类型业务请求的所有业务请求中,第二业务请求的请求时间早于且最接近第一业务请求的请求时间。
请参阅图8,图8为本申请实施例中服务器的结构示意图。
本申请实施例中服务器一个实施例可以包括一个或一个以上处理器401,存储器402,通信接口403。
存储器402可以是短暂存储或持久存储。更进一步地,处理器401可以配置为与存储器402通信,在控制设备上执行存储器402中的一系列指令操作。
本实施例中,处理器401可以执行前述各个实施例中方法的步骤,具体此处不再赘述。
示例性地,处理401可以执行以下步骤:
接收第一网络请求,第一网络请求用于调用第一业务模块;
基于第一业务模块在处理第一网络请求的过程中运行错误,或基于第一业务模块接收的来自第二业务模块的对于第二网络请求的第一网络响应中携带有错误标识,打印日志,第二网络请求是第一业务模块处理第一网络请求的过程中为调用第二业务模块而发送的,第一业务模块和第二业务模块属于目标调用链,错误标识指示目标调用链中存在运行错误的业务模块。
在本申请实施例中,处理器401中的具体功能模块划分可以与前述图7中所描述的功能模块的划分方式类似,此处不再赘述。
本申请实施例还提供一种芯片或者芯片系统,该芯片或者芯片系统包括至少一个处理器和通信接口,通信接口和至少一个处理器通过线路互联,至少一个处理器用于运行计算机程序或指令,以执行前述各个实施例中方法的步骤,具体此处不再赘述。
其中,芯片中的通信接口可以为输入/输出接口、管脚或电路等。
本申请实施例还提供了芯片或者芯片系统的第一种实施方式,本申请中上述描述的芯片或者芯片系统还包括至少一个存储器,该至少一个存储器中存储有指令。该存储器可以为芯片内部的存储单元,例如,寄存器、缓存等,也可以是该芯片的存储单元(例如,只读存储器、随机存取存储器等)。
本申请实施例还提供了一种计算机存储介质,该计算机存储介质用于储存为上述服务器所用的计算机软件指令,其包括用于执行为服务器所设计的程序。
该服务器可以如前述图7所描述的打印日志的装置。
本申请实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机软件指令,该计算机软件指令可通过处理器进行加载来实现前述各个实施例所示的方法中的流程。
请参阅图9,本申请实施例提供的一种业务系统的实施例示意图。如图9所示,本申请实施例提供了一种业务系统,包括目标调用链,目标调用链中包含第一业务模块100;第一业务模块100用于执行如前述各个实施例中的打印日志的方法。
在一种实现方式下,目标调用链中还包括第四业务模块200,业务系统还包括日志管理模块300;目标调用链用于处理客户端发送的特定类型业务请求,特定类型业务请求包括第一业务请求和第二业务请求;第一网络请求是第一业务模块100在目标调用链处理第一业务请求的过程中接收到的。
日志管理模块300用于,获取在目标调用链处理第一业务请求的过程中,目标调用链中业务模块打印的日志;且基于目标调用链中业务模块打印的日志中未包含第四业务模块200打印的日志,获取第四业务模块200在目标调用链处理第二业务请求的过程中打印的日志,以对目标调用链处理第一业务请求的过程进行分析,第四业务模块200在目标调用链处理第二业务请求的过程中打印的日志指示,在目标调用链处理第二业务请求的过程中目标调用链中不存在运行错误的业务模块。
在一种实现方式下,在目标调用链已处理的特定类型业务请求的所有业务请求中,第二业务请求的请求时间早于且最接近第一业务请求的请求时间。
需要说明的是日志管理模块300的功能和具体实现,可参照前述实施例中对日志管理模块300的相关说明进行理解。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

Claims (17)

1.一种打印日志的方法,其特征在于,所述方法包括:
第一业务模块接收第一网络请求,所述第一网络请求用于调用所述第一业务模块;
基于所述第一业务模块在处理所述第一网络请求的过程中运行错误,或基于所述第一业务模块接收的来自第二业务模块的第一网络响应中携带有错误标识,所述第一业务模块打印日志,其中,所述第一网络响应是对于第二网络请求的,所述第二网络请求是所述第一业务模块处理所述第一网络请求的过程中为调用第二业务模块而发送的,所述第一业务模块和所述第二业务模块属于目标调用链,所述错误标识指示所述目标调用链中存在运行错误的业务模块。
2.根据权利要求1所述的方法,其特征在于,预设第一周期内,所述第一业务模块在所述目标调用链中存在运行错误的业务模块的情况下,打印的日志数量小于第一预设数量。
3.根据权利要求1或2所述的方法,其特征在于,在所述第一业务模块接收第一网络请求之后,所述方法还包括:
所述第一业务模块将所述第一网络请求中的数据保存至内存;
所述第一业务模块发送对于所述第一网络请求的第二网络响应,所述第二网络响应指示调用所述第一业务模块的结果;
所述第一业务模块打印日志包括:
所述第一业务模块根据保存的所述第一网络请求中的数据打印入口日志;
所述第一业务模块根据所述第二网络响应中的数据打印出口日志。
4.根据权利要求3所述的方法,其特征在于,所述第一网络请求来自于第三业务模块,所述第三业务模块属于所述目标调用链;
所述第一业务模块发送对于所述第一网络请求的第二网络响应包括:
基于所述第一业务模块运行错误或所述第一网络响应中携带有所述错误标识,所述第一业务模块向所述第三业务模块发送对于所述第一网络请求的携带有所述错误标识的第二网络响应,以使得所述第三业务模块打印日志。
5.根据权利要求1至4中任意一项所述的方法,其特征在于,所述方法还包括:
第一业务模块接收第三网络请求,所述第三网络请求用于调用所述第一业务模块;
基于所述第一业务模块在处理所述第三网络请求的过程中未运行错误,且接收到的第三网络响应中不包含所述错误标识,所述第一业务模块不打印日志。
6.根据权利要求1至4中任意一项所述的方法,其特征在于,所述方法还包括:
所述第一业务模块接收第三网络请求,所述第三网络请求用于调用所述第一业务模块;
基于预设第二周期内,所述第一业务模块在处理所述第三网络请求的过程中未运行错误,且接收到的第三网络响应中不包含所述错误标识的情况下,所述第一业务模块已打印的日志数量小于第二预设数量,所述第一业务模块打印日志。
7.根据权利要求1至6中任意一项所述的方法,其特征在于,所述目标调用链属于目标业务系统,且用于处理客户端发送的特定类型业务请求,所述目标业务系统还包括日志管理模块,所述特定类型业务请求包括第一业务请求和第二业务请求,所述目标调用链还包括第四业务模块;
所述第一网络请求是所述第一业务模块在所述目标调用链处理所述第一业务请求的过程中接收到的;
特定类型业务请求所述方法还包括:
所述日志管理模块获取在所述目标调用链处理所述第一业务请求的过程中,所述目标调用链中业务模块打印的日志;
基于所述目标调用链中业务模块打印的日志中未包含所述第四业务模块打印的日志,所述日志管理模块获取所述第四业务模块在所述目标调用链处理所述第二业务请求的过程中打印的日志,以对所述目标调用链处理第一业务请求的过程进行分析,所述第四业务模块在所述目标调用链处理第二业务请求的过程中打印的日志指示,在所述目标调用链处理所述第二业务请求的过程中所述目标调用链中不存在运行错误的业务模块。
8.根据权利要求7所述的方法,其特征在于,在所述目标调用链已处理的所述特定类型业务请求的所有业务请求中,所述第二业务请求的请求时间早于且最接近所述第一业务请求的请求时间。
9.一种打印日志的装置,其特征在于,所述装置包括:
接收单元,用于接收第一网络请求;
日志打印单元,用于基于在处理所述第一网络请求的过程中运行错误,或基于接收的来自第二业务模块的对于所述第二网络请求的第一网络响应中携带有错误标识,打印日志,所述第二网络请求是处理所述第一网络请求的过程中为调用第二业务模块而发送的,所述第二业务模块属于目标调用链,所述错误标识指示所述目标调用链中存在运行错误的业务模块。
10.根据权利要求9所述的方法,其特征在于,预设第一周期内,所述第一业务模块在所述目标调用链中存在运行错误的业务模块的情况下,打印的日志数量小于第一预设数量。
11.根据权利要求9或10所述的方法,其特征在于,所述装置还包括:
保存单元,用于将所述第一网络请求中的数据保存至内存;
发送单元,用于发送对于所述第一网络请求的第二网络响应,所述第二网络响应指示调用所述第一业务模块的结果;
所述日志打印单元,用于根据保存的所述第一网络请求中的数据打印入口日志,且根据所述第二网络响应中的数据打印出口日志。
12.根据权利要求11所述的方法,其特征在于,所述第一网络请求来自于第三业务模块,所述第三业务模块属于所述目标调用链;
所述发送单元,还用于基于所述第一业务模块运行错误或所述第一网络响应中携带有错误标识,向所述第三业务模块发送对于所述第一网络请求的携带有所述错误标识的第二网络响应,以使得所述第三业务模块打印日志。
13.一种服务器,其特征在于,包括:至少一个处理器和存储器,存储器存储有可在处理器上运行的计算机执行指令,当所述计算机执行指令被所述处理器执行时,所述服务器执行如上述权利要求1-8中任意一项所述的方法。
14.一种存储一个或多个计算机执行指令的计算机可读存储介质,其特征在于,当所述计算机执行指令被处理器执行时,所述处理器执行如上述权利要求1-8中任意一项所述的方法。
15.一种业务系统,其特征在于,包括目标调用链,所述目标调用链中包含第一业务模块;
所述第一业务模块用于执行如上述权利要求1-8中任意一项所述的方法。
16.根据权利要求15所述的业务系统,其特征在于,所述目标调用链中还包括第四业务模块,所述业务系统还包括日志管理模块;
所述目标调用链用于处理客户端发送的特定类型业务请求,所述特定类型业务请求包括第一业务请求和第二业务请求;
所述第一网络请求是所述第一业务模块在所述目标调用链处理所述第一业务请求的过程中接收到的;
所述日志管理模块用于,获取在所述目标调用链处理所述第一业务请求的过程中,所述目标调用链中业务模块打印的日志;
且基于所述目标调用链中业务模块打印的日志中未包含所述第四业务模块打印的日志,获取所述第四业务模块在所述目标调用链处理第二业务请求的过程中打印的日志,以对所述目标调用链处理第一业务请求的过程进行分析,所述第四业务模块在所述目标调用链处理第二业务请求的过程中打印的日志指示,在所述目标调用链处理所述第二业务请求的过程中所述目标调用链中不存在运行错误的业务模块。
17.根据权利要求15所述的业务系统,其特征在于,在所述目标调用链已处理的所述特定类型业务请求的所有业务请求中,所述第二业务请求的请求时间早于且最接近所述第一业务请求的请求时间。
CN202010762131.9A 2020-07-31 2020-07-31 一种打印日志的方法、装置及系统 Pending CN114064384A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202010762131.9A CN114064384A (zh) 2020-07-31 2020-07-31 一种打印日志的方法、装置及系统
PCT/CN2021/108370 WO2022022446A1 (zh) 2020-07-31 2021-07-26 一种打印日志的方法、装置及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010762131.9A CN114064384A (zh) 2020-07-31 2020-07-31 一种打印日志的方法、装置及系统

Publications (1)

Publication Number Publication Date
CN114064384A true CN114064384A (zh) 2022-02-18

Family

ID=80037566

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010762131.9A Pending CN114064384A (zh) 2020-07-31 2020-07-31 一种打印日志的方法、装置及系统

Country Status (2)

Country Link
CN (1) CN114064384A (zh)
WO (1) WO2022022446A1 (zh)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9459911B2 (en) * 2012-06-29 2016-10-04 International Business Machines Corporation Dynamically adjusting a log level of a transaction
CN110858130B (zh) * 2018-08-22 2021-05-25 网宿科技股份有限公司 日志打印方法及系统、服务器
CN109471845A (zh) * 2018-10-25 2019-03-15 深圳壹账通智能科技有限公司 日志管理方法、服务器及计算机可读存储介质
CN110287053B (zh) * 2019-06-27 2022-11-04 四川新网银行股份有限公司 分布式系统异常统一处理的方法
CN111341445B (zh) * 2020-02-05 2024-04-16 网宿科技股份有限公司 微服务调用链的健康检测方法和健康检测系统
CN111459760B (zh) * 2020-04-01 2023-03-24 交通银行股份有限公司太平洋信用卡中心 一种微服务监控方法、装置及计算机存储介质

Also Published As

Publication number Publication date
WO2022022446A1 (zh) 2022-02-03

Similar Documents

Publication Publication Date Title
CN110119292B (zh) 系统运行参数查询方法、匹配方法、装置及节点设备
CN111786959B (zh) 安全防护方法、waf系统、电子设备及存储介质
CN111723313A (zh) 页面跳转的处理方法、装置、设备及存储介质
CN108287769B (zh) 一种信息处理方法及装置
CN110308880B (zh) 日志打印方法、系统、计算机设备及计算机可读存储介质
CN109714214B (zh) 一种服务器异常的处理方法及管理设备
CN113312675A (zh) 属性校验方法、装置、电子设备及存储介质
CN110716730B (zh) 灰度发布方法、装置、设备及计算机可读存储介质
CN114064384A (zh) 一种打印日志的方法、装置及系统
CN115242778A (zh) 一种文件传输方法、装置、电子设备及可读存储介质
CN115480934A (zh) 一种分布式数据处理的方法、装置、设备及储存介质
CN115208671A (zh) 防火墙配置方法、装置、电子设备和存储介质
CN115098157A (zh) 一种公共业务数据的处理方法及装置
CN113010885A (zh) 一种检测伪装起始地址的内核线程的方法及装置
CN112671561B (zh) 一种云主机的网卡配置的方法和设备
CN116755805B (zh) 应用于c++的资源优化方法及装置
CN111475226B (zh) 电子装置、微服务调用方法和计算机可读存储介质
CN110096555B (zh) 一种分布式系统的表匹配处理方法及装置
CN113761430A (zh) 业务访问方法、装置、设备及计算机可读存储介质
CN112365259A (zh) 系统集成中台的积分同步方法及积分同步系统
CN116643787A (zh) 分布式应用的发布方法、装置、设备及存储介质
CN116627814A (zh) 业务处理方法、装置、存储介质及电子装置
CN115220822A (zh) 接口挡板的实现方法及装置
CN116248495A (zh) 资源确定方法、装置和电子设备
CN114329540A (zh) 文件分发的处理方法及装置、存储介质、终端

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