掌桥专利:专业的专利平台
掌桥专利
首页

一种日志打印控制方法和装置

文献发布时间:2023-06-19 16:04:54



技术领域

本发明涉及计算机技术领域,尤其涉及一种日志打印控制方法和装置。

背景技术

日志打印是各种系统运行监控、排查定位问题、追踪数据变化的一种数据记录方式。当前通过在系统中设计日志打印相关的功能模块,比如Log4j框架或者Logback框架进行日志输出,这些日志框架可以对要打印的日志分等级进行打印控制。

在实现本发明过程中,现有技术中至少存在如下问题:

如果系统的流量突增,会导致日志突增,此时若使用现有的日志框架进行分等级打印,则会出现磁盘输入/输出(Input/Output,I/O)频繁,中央处理器(CentralProcessing Unit,CPU)的占用率急速上升,内存的占用率急速上升等情况,这会造成服务器宕机的风险大大增加,进而导致整个系统产生雪崩效应。

发明内容

有鉴于此,本发明实施例提供一种日志打印控制方法和装置,该方法在打印日志之前,使用配置的收敛策略对日志的输出进行收敛控制,同时在打印日志时增加日志标识,既能保证系统稳定运行,又能够在系统发生故障时,快速进行问题定位。

为实现上述目的,根据本发明实施例的一个方面,提供了一种日志打印控制方法。

本发明实施例的一种日志打印控制方法,包括:响应于用户请求,执行相应的业务逻辑代码,当所述业务逻辑代码执行到首个日志打印函数时,为所述用户请求生成相应的日志标识;获取预配置的收敛策略,根据所述收敛策略指定的收敛维度,对执行到的日志打印函数的打印任务进行收敛控制,得到待打印日志;根据所述日志标识和设定的日志格式,对所述待打印日志进行格式化,得到日志信息,启动日志打印线程打印所述日志信息。

可选地,所述收敛维度包括所述用户请求的用户标识、单位时间内的用户请求量、单位时间内的日志量和类路径中的任意一种或者多种;所述对执行到的日志打印函数的打印任务进行收敛控制,包括:如果所述收敛维度包括所述用户标识,则对所述用户标识进行哈希运算后与设定的切量值进行取余,得到余数,确定所述余数位于设定的切量范围内,允许执行所述日志打印函数;如果所述收敛维度包括所述单位时间内的用户请求量,则按照设定的取样比例,对所述单位时间收到的用户请求进行取样,确定所述用户请求命中取样,允许执行所述日志打印函数;如果所述收敛维度包括所述单位时间内的日志量,则将所述日志打印函数对应的日志长度累加到日志长度变量,确定累加后的日志长度变量小于等于设定的长度阈值,允许执行所述日志打印函数;其中,所述日志长度变量用于记录当前累加的日志长度;如果所述收敛维度包括所述类路径,则确定所述日志打印函数的类路径不属于设定的目标路径,允许执行所述日志打印函数。

可选地,所述业务逻辑代码包括多个所述日志打印函数;所述对执行到的日志打印函数的打印任务进行收敛控制,包括:当所述业务逻辑代码执行到首个所述日志打印函数时,根据使用所述用户标识和/或所述单位时间内的用户请求量所确定的收敛结果,生成收敛标识;当所述业务逻辑代码执行到非首个所述日志打印函数时,获取所述收敛标识,根据所述收敛标识,确定允许或者不允许执行所述日志打印函数。

可选地,所述收敛维度还包括全局降级开关,且所述全局降级开关的优先级高于其他收敛维度的优先级;所述对执行到的日志打印函数的打印任务进行收敛控制,包括:根据所述全局降级开关的状态,确定允许打印日志的情况下,对执行到的日志打印函数的打印任务进行所述其他收敛维度的收敛控制。

可选地,所述为所述用户请求生成相应的日志标识,包括:将当前处理所述用户请求的服务器的IP地址、线程号和当前时间的时间戳拼接后进行哈希运算,得到所述用户请求的日志标识。

可选地,所述日志格式用于在日志体前后增加标识符,所述标识符用于表示所述日志体的构成;所述对所述待打印日志进行格式化,包括:对所述待打印日志进行切分,得到多个切分日志,为所述多个切分日志分别设置切分编号;将所述切分日志作为日志体,为所述日志体添加所述标识符;其中,首个日志体的标识符包括所述日志标识和相应切分编号的拼接结果、类路径和方法以及用户标识,非首个日志体的标识符包括所述日志标识和相应切分编号的拼接结果。

可选地,所述切分编号包括所述待打印日志的日志编号和切分顺序号;所述得到待打印日志的步骤之后,所述方法还包括:根据所述日志打印函数在所述业务逻辑代码的执行顺序,对所述待打印日志进行编号,得到所述待打印日志的日志编号。

为实现上述目的,根据本发明实施例的另一方面,提供了一种日志打印控制装置。

本发明实施例的一种日志打印控制装置,包括:标识生成模块,用于响应于用户请求,执行相应的业务逻辑代码,当所述业务逻辑代码执行到首个日志打印函数时,为所述用户请求生成相应的日志标识;

收敛控制模块,用于获取预配置的收敛策略,根据所述收敛策略指定的收敛维度,对执行到的日志打印函数的打印任务进行收敛控制,得到待打印日志;日志打印模块,用于根据所述日志标识和设定的日志格式,对所述待打印日志进行格式化,得到日志信息,启动日志打印线程打印所述日志信息。

可选地,所述收敛维度包括所述用户请求的用户标识、单位时间内的用户请求量、单位时间内的日志量和类路径中的任意一种或者多种;所述收敛控制模块,还用于如果所述收敛维度包括所述用户标识,则对所述用户标识进行哈希运算后与设定的切量值进行取余,得到余数,确定所述余数位于设定的切量范围内,允许执行所述日志打印函数;如果所述收敛维度包括所述单位时间内的用户请求量,则按照设定的取样比例,对所述单位时间收到的用户请求进行取样,确定所述用户请求命中取样,允许执行所述日志打印函数;如果所述收敛维度包括所述单位时间内的日志量,则将所述日志打印函数对应的日志长度累加到日志长度变量,确定累加后的日志长度变量小于等于设定的长度阈值,允许执行所述日志打印函数;其中,所述日志长度变量用于记录当前累加的日志长度;如果所述收敛维度包括所述类路径,则确定所述日志打印函数的类路径不属于设定的目标路径,允许执行所述日志打印函数。

可选地,所述业务逻辑代码包括多个所述日志打印函数;所述收敛控制模块,还用于当所述业务逻辑代码执行到首个所述日志打印函数时,根据使用所述用户标识和/或所述单位时间内的用户请求量所确定的收敛结果,生成收敛标识;当所述业务逻辑代码执行到非首个所述日志打印函数时,获取所述收敛标识,根据所述收敛标识,确定允许或者不允许执行所述日志打印函数。

可选地,所述收敛维度还包括全局降级开关,且所述全局降级开关的优先级高于其他收敛维度的优先级;所述收敛控制模块,还用于根据所述全局降级开关的状态,确定允许打印日志的情况下,对执行到的日志打印函数的打印任务进行所述其他收敛维度的收敛控制。

可选地,所述标识生成模块,还用于将当前处理所述用户请求的服务器的IP地址、线程号和当前时间的时间戳拼接后进行哈希运算,得到所述用户请求的日志标识。

可选地,所述日志格式用于在日志体前后增加标识符,所述标识符用于表示所述日志体的构成;所述日志打印模块,还用于对所述待打印日志进行切分,得到多个切分日志,为所述多个切分日志分别设置切分编号;将所述切分日志作为日志体,为所述日志体添加所述标识符;其中,首个日志体的标识符包括所述日志标识和相应切分编号的拼接结果、类路径和方法以及用户标识,非首个日志体的标识符包括所述日志标识和相应切分编号的拼接结果。

可选地,所述切分编号包括所述待打印日志的日志编号和切分顺序号;所述装置还包括:日志编号模块,用于根据所述日志打印函数在所述业务逻辑代码的执行顺序,对所述待打印日志进行编号,得到所述待打印日志的日志编号。

为实现上述目的,根据本发明实施例的再一方面,提供了一种电子设备。

本发明实施例的一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例的一种日志打印控制方法。

为实现上述目的,根据本发明实施例的再一方面,提供了一种计算机可读介质。

本发明实施例的一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例的一种日志打印控制方法。

上述发明中的一个实施例具有如下优点或有益效果:通过在打印日志之前,使用配置的收敛策略对日志的输出进行收敛控制,同时在打印日志时增加日志标识,既能保证系统稳定运行,又能够在系统发生故障时,快速进行问题定位。通过多个维度对日志的输出进行收敛控制,能够保证在流量突增时的日志量与正常情况下的日志量大致相同,使得日志打印尽量少的占用系统执行业务逻辑所需的资源,进一步保证系统稳定运行,且灵活性好。

由每次用户请求的首个日志打印函数进行用户标识维度和/或单位时间内的用户请求量维度的收敛判断,并根据收敛结果生成收敛标识,使得该用户请求的后续日志打印位置只需获取收敛标识,无需重新进行这些维度的收敛判断,能够最大程度的减少每次日志打印过程中重复的收敛判断。通过全局降级开关控制是否对用户请求进行日志打印,在允许打印日志时,再进一步进行其他维度的收敛判断,避免无效的收敛判断。

通过在首个日志打印函数处为用户请求生成唯一的日志标识,后续其他日志打印函数均以该日志标识作为请求级别的标识符,保证在系统发生故障时,可以快速定位。通过对待打印日志进行切分和格式处理,使得输出的日志为统一格式,便于后续进行问题定位。通过为待打印日志进行编号并添加到日志体中,提高了问题定位的准确性。

上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。

附图说明

附图用于更好地理解本发明,不构成对本发明的不当限定。其中:

图1是根据本发明实施例的日志打印控制方法的主要步骤的示意图;

图2是根据本发明实施例的日志打印控制方法的实现架构示意图;

图3是根据本发明实施例的日志打印控制方法的主要流程示意图;

图4是本发明实施例的日志打印控制方法中收敛策略的示意图;

图5是根据本发明实施例的日志打印控制装置的主要模块的示意图;

图6是本发明实施例可以应用于其中的示例性系统架构图;

图7是适用于来实现本发明实施例的电子设备的计算机装置的结构示意图。

具体实施方式

以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

图1是根据本发明实施例的日志打印控制方法的主要步骤的示意图。如图1所示,本发明实施例的日志打印控制方法,由日志打印控制装置执行,主要包括如下步骤:

步骤S101:响应于用户请求,执行相应的业务逻辑代码,当所述业务逻辑代码执行到首个日志打印函数时,为所述用户请求生成相应的日志标识。用户通过客户端发送用户请求至日志打印控制装置。日志打印控制装置获取该用户请求对应的业务逻辑代码并执行。业务逻辑代码中可以包括一个或者多个日志打印函数。在执行到首个日志打印函数时,为用户请求生成唯一的日志标识,该用户请求的其他日志打印函数均以该日志标识作为请求级别的唯一标识符。

步骤S102:获取预配置的收敛策略,根据所述收敛策略指定的收敛维度,对执行到的日志打印函数的打印任务进行收敛控制,得到待打印日志。该收敛策略用于对日志的输出进行收敛控制。实施例中,收敛维度可以包括用户请求的用户标识(比如用户账号)、单位时间内的用户请求量、单位时间内的日志量和类路径中的任意一种或者多种。

每种收敛维度对应一种收敛控制的实现方式。对于用户标识这一收敛维度,则对用户标识进行哈希运算后与设定的切量值进行取余,得到余数,之后确定余数位于设定的切量范围内,允许执行日志打印函数。对于单位时间内的用户请求量这一收敛维度,则按照设定的取样比例,对单位时间收到的用户请求进行取样,确定用户请求命中取样,允许执行日志打印函数。

对于单位时间内的日志量这一收敛维度,则将日志打印函数对应的日志长度累加到日志长度变量,确定累加后的日志长度变量小于等于设定的长度阈值,允许执行日志打印函数;其中,日志长度变量用于记录当前累加的日志长度。对于类路径这一收敛维度,则确定日志打印函数的类路径不属于设定的目标路径,允许执行日志打印函数。

经过上述处理可以得到业务逻辑代码中所有允许被执行的日志打印函数,这些日志打印函数对应的日志构成待打印日志。

步骤S103:根据所述日志标识和设定的日志格式,对所述待打印日志进行格式化,得到日志信息,启动日志打印线程打印所述日志信息。本步骤用于统一日志输出的格式。具体地,可以按照设定的日志格式,对待打印日志进行格式化,为了便于进行问题定位,在格式化过程中需要添加日志标识。

实施例中,为了避免打印的日志过长,需要对待打印日志进行切分,得到多个切分日志,之后对切分日志进行格式化,得到日志信息。最后启动日志打印线程即可打印日志信息。上述处理既能保证系统稳定运行,又能够在系统发生故障时,快速进行问题定位。

图2是根据本发明实施例的日志打印控制方法的实现架构示意图。如图2所示,本发明实施例的日志打印控制方法可应用于流量突增的场景,该场景下由于大量用户同时访问同一个业务功能,导致瞬时流量突增,如果在日志打印时只进行日志输出级别的控制,不针对流量进行控制,会导致服务器宕机。

为了解决上述问题,本实施例针对用户流量对日志打印进行了控制。以N个用户同时访问结算下单服务为例,结算下单服务的实现需要执行多个逻辑块,每个逻辑块能够实现结算下单服务的部分功能,且部分或者全部逻辑块中包括日志打印函数。

在顺序执行各逻辑块时,如果该逻辑块包含日志打印函数,则对日志打印进行多维度的收敛控制,比如全局降级开关、用户请求的用户标识、单位时间内的用户请求量、单位时间内的日志量和类路径等维度的收敛控制,以确定待打印日志,之后再使用日志框架(比如Log4j框架)进行日志打印。最终打印出的日志可以包括多种日志级别,比如error(错误)、warn(警告)、info(正常)和debug(故障)。

图3是根据本发明实施例的日志打印控制方法的主要流程示意图。如图3所示,本发明实施例的日志打印控制方法,由日志打印控制装置执行,主要包括如下步骤:

步骤S301:响应于单位时间内收到的多个用户请求,执行相应的业务逻辑代码。多个用户通过客户端在单位时间内向日志打印控制装置发送了用户请求,这些用户请求用于请求同一个业务功能,比如结算页面的地址切换功能。实施例中,单位时间比如为500毫秒、1秒、2秒等。

日志打印控制装置获取这些用户请求对应的业务逻辑代码并执行。由于多个用户请求用于请求同一个业务功能,因此执行的业务逻辑代码为同一段代码。以地址切换功能为例,执行该功能对应的业务逻辑代码时,每次调用日志打印函数的位置均为一个日志打印请求。

步骤S302:当业务逻辑代码执行到首个日志打印函数时,为多个用户请求分别生成相应的日志标识。实施例中,可以在执行到每个用户请求的第一个日志打印函数时,生成日志标识(TraceId)。该日志标识为一个用户请求的唯一日志记录的标识。之后该用户请求的剩余日志打印函数可以使用getTraceId()方法获取TraceId,以使用该TraceId作为请求级别的唯一标识符,这样在查问题过程中可以快速定位。

其中,日志标识的生成过程可以有多种方式,比如为:将当前处理用户请求的服务器的IP地址、线程号和当前时间的时间戳拼接后进行哈希运算,得到该用户请求的日志标识。再比如还可以为:将用户标识、当前处理用户请求的服务器的IP地址、线程号和当前时间的时间戳拼接后进行哈希运算,得到该用户请求的日志标识。线程号为处理用户请求所使用线程的编号。

实施例中,可以使用Java容器自带的ThreadLocal(线程局部变量),创建TraceId变量,存入ThreadLocal中,保证用户请求的剩余日志打印函数获取到的TraceId是唯一的。TraceId的生命周期是请求级别的,在用户请求结束后,清空ThreadLocal中的TraceId相关信息即可。

步骤S303:获取预配置的收敛策略,根据收敛策略指定的收敛维度,对执行到的日志打印函数的打印任务进行收敛控制,得到待打印日志。本步骤用于对日志打印进行多个维度的收敛控制。实施例中,通过动态配置收敛策略,实现收敛控制的即时性以及代码的灵活性。

图4是本发明实施例的日志打印控制方法中收敛策略的示意图。如图4所示,本发明实施例的收敛策略包括全局降级开关、用户请求的用户标识、单位时间内的用户请求量、单位时间内的日志量和类路径五个收敛维度。

对于全局降级开关这一收敛维度,是通过读取配置的全局降级开关的状态,控制日志打印。如果全局降级开关开启,则所有用户请求均不打印日志;如果全局降级开关关闭,则允许打印日志,进一步进行其他收敛维度的收敛控制。也即全局降级开关的优先级高于其他收敛维度的优先级,只有在全局降级开关关闭的情况下,才进行其他收敛维度的收敛控制。另外,对于全局降级开关的配置可以在流量高峰时刻随时调整。

对于用户请求的用户标识这一收敛维度,是根据每个用户请求的用户标识进行百分比切量控制。具体地,对用户标识进行哈希(hash)运算后与设定的切量值进行取余,得到余数;判断余数是否位于设定的切量范围内,如果余数位于设定的切量范围内,则允许执行日志打印函数;否则,不允许执行日志打印函数。

实施例中,切量值为正常日志量(即非峰值时的日志量),可以根据经验自定义,比如默认为10000。切量范围根据预估的峰值流量计算得出,切量范围的最大值可为峰值流量与正常流量的比值(比如2000),最小值可为0,并且切量范围在峰值开始之前进行设置,用以保证峰值时的日志量与正常日志量大致相同,保证日志打印所消耗的系统资源尽量少的抢占执行业务逻辑所需要的资源,保证系统稳定。切量值、切量范围也是动态配置,可以在流量高峰时刻随时调整。

对于单位时间内的用户请求量这一收敛维度,是按照设定的取样比例,对单位时间收到的用户请求进行取样,判断一个用户请求是否命中取样,如果命中取样,则允许执行日志打印函数;否则,不允许执行日志打印函数。实施例中,记录单位时间内需要打印日志的用户请求的TraceId,并对这些TraceId进行百分比取样,取样比例可以动态配置的。如果命中取样,则允许执行日志打印函数,否则丢弃。

对于单位时间内的日志量这一收敛维度,是在执行日志打印函数之前,将日志打印函数对应的日志长度累加到日志长度变量,判断累加后的日志长度变量是否小于等于设定的长度阈值,如果累加后的日志长度变量小于等于长度阈值,则允许执行日志打印函数;否则,不允许执行日志打印函数。其中,日志长度变量用于记录当前累加的日志长度。长度阈值也是动态配置,可以在流量高峰时刻随时调整。

实施例中,记录同一秒内需要打印的日志量的字符大小(size),将该字符大小与动态配置中的长度阈值对比。如果字符大小小于等于长度阈值,则允许执行日志打印函数;否则,不允许执行日志打印函数。

对于类路径这一收敛维度,是判断日志打印函数的类路径是否属于设定的目标路径,如果日志打印函数的类路径不属于设定的目标路径,则允许执行日志打印函数;否则,不允许执行日志打印函数。目标路径为不需要打印的类的路径(包括类名和包路径)。实施例中,获取当前日志打印对象中的对象包路径,如果命中动态配置中的包路径,则对该类内所有的日志打印都进行丢弃。

业务逻辑代码中通常包括多个日志打印函数,在一优选的实施例中,可以在每个用户请求的业务逻辑代码执行到首个日志打印函数时,根据使用用户标识和/或单位时间内的用户请求量所确定的收敛结果,生成一个收敛标识,该用户请求的非首个日志打印函数只需获取该收敛标识即可,不需要重复进行收敛判断,以最大程度的减少每次日志打印过程中重复的收敛判断。

具体地,本步骤中,当业务逻辑代码执行到首个日志打印函数时,根据使用用户标识和/或单位时间内的用户请求量所确定的收敛结果,生成收敛标识;当业务逻辑代码执行到非首个日志打印函数时,获取该收敛标识,根据收敛标识,确定允许或者不允许执行日志打印函数。

以用户标识这一收敛维度为例,如果余数在切量范围内,则收敛标识可以设置为ture,后续其他日志打印函数获取到该收敛标识时,可以直接执行日志打印函数;如果余数不在切量范围内,则收敛标识可以设置为false,后续其他日志打印函数获取到该收敛标识时,可以直接拒绝执行日志打印函数,无需重复判断。

经过上述处理可以得到业务逻辑代码中所有允许被执行的日志打印函数,这些日志打印函数对应的日志构成待打印日志。

步骤S304:根据各日志打印函数在业务逻辑代码的执行顺序,对相应的待打印日志进行编号,得到待打印日志的日志编号。实施例中,可以使用日志计数器对所有待打印日志进行顺序编号,通过编号将这些日志串联起来,便于准确进行问题定位。

具体地,在ThreadLocal中定义日志计数器,创建TraceId并设置到当前线程中,初始化日志计数器的编号为0,之后每获取到一个TraceId,则将日志计数器的编号加1,在每条要打印的日志中都加上该日志计数器所计算出的编号,一并打印到日志中。

步骤S305:根据日志标识、日志编号和设定的日志格式,对待打印日志进行格式化,得到日志信息。本步骤用于为后续进行日志分析、日志定位提供一个统一的格式标准。日志格式可用于在日志体前后增加标识符,该标识符用于表示日志体的构成。

为了避免打印日志的长度过长,需要对日志长度进行限制。实施例中,可以设定日志最大尺寸,对每条待打印日志进行大小判断,如果待打印日志大于该日志最大尺寸,则对待打印日志进行切分后,再对切分结果添加标识符;如果待打印日志小于等于该日志最大尺寸,则直接添加标识符。

对于需要切分的待打印日志的格式化过程为:根据设定的日志最大尺寸,对待打印日志进行切分,得到多个切分日志,为多个切分日志分别设置切分编号;之后将切分日志作为日志体,为日志体添加标识符。

其中,首个日志体的标识符包括日志标识和相应切分编号的拼接结果、类路径和方法以及用户标识;非首个日志体的标识符包括日志标识和相应切分编号的拼接结果。实施例中,切分编号包括待打印日志的日志编号和切分顺序号,保证了日志顺序以及完整性。

对于无需切分的待打印日志的格式化过程为:将待打印日志作为日志体,为日志体添加标识符。其中,日志体的标识符包括日志标识和相应日志编号的拼接结果、类路径和方法以及用户标识。

以info级别的待打印日志为例,假设日志最大尺寸为3000,待打印日志的日志长度为6500,则打印时会被分为3段,前两段每段为3000字符,最后一段为500字符。则对该待打印日志的格式化结果为:

[]|"类路径|方法"|“pin”|描述|in/out|日志体p->|

[]|p->|日志体p->|

[]|p->|日志体

上述格式化结果中,pin即用户标识;描述用于说明要打印的类和方法;in、out分别为入参和出参。其中,描述和in/out这两部分非必须,其在rpc远程调用时会使用,而对于其他情况,比如仅需打印一句话,则无需这两部分内容。

对于error级别、warn级别、debug级别的待打印日志,格式化过程与info级别的待打印日志相似,区别在于日志体内容不同。比如,info级别的日志体为参数和返回结果;error级别的日志体为异常码。假设error级别的待打印日志的日志长度小于日志最大尺寸,则其格式化结果可以为:

[]|"类路径|方法"|“pin”|描述|in/out|日志体堆栈

其中,堆栈表示异常码的位置。

上述格式化结果可以详细说明要打印的日志,便于定位问题。

步骤S306:启动日志打印线程打印日志信息。实施例中,可以定义用于日志打印的动态线程池,设置异步开关,以控制线程的异步执行,实现异步打印日志信息。此操作能够最大化利用资源,同时异步线程在执行过程中不会影响到主逻辑。

在一可选的实施例中,还可以设置日志打印级别,以控制输出的日志级别。以Log4j框架为例,其使用了四个日志打印级别,优先级从高到低分别是error、warn、info和debug。可以控制日志打印级别为info,则大于等于该级别的日志被输出,小于该级别的日志不被输出,即所有debug级别的日志信息将不被打印。

在另一优选的实施例中,在执行各个日志打印函数之前,可以分别进行数据合法性验证,即判断各个日志打印函数的入参相关数据是否为空,如果为空,则不允许执行该日志打印函数;如果不为空,则允许执行该日志打印函数。

通过本发明实施例的日志打印控制方法可以看出,通过在流量突增时,对日志的输出进行打印收敛,以合理控制日志打印的前提条件、打印方式等,保证流量峰值时的日志量与正常量大致相同,尽量减少日志打印抢占系统执行业务逻辑所需要的资源,从而保证流量突增时系统的稳定,同时在系统故障时,能够快速准确的进行问题定位,降低了问题排查的难度,提高了排查效率。

图5是根据本发明实施例的日志打印控制装置的主要模块的示意图。如图5所示,本发明实施例的日志打印控制装置500,主要包括:

标识生成模块501,用于响应于用户请求,执行相应的业务逻辑代码,当所述业务逻辑代码执行到首个日志打印函数时,为所述用户请求生成相应的日志标识。用户通过客户端发送用户请求至标识生成模块。标识生成模块获取该用户请求对应的业务逻辑代码并执行。业务逻辑代码中可以包括一个或者多个日志打印函数。在执行到首个日志打印函数时,为用户请求生成唯一的日志标识,该用户请求的其他日志打印函数均以该日志标识作为请求级别的唯一标识符。

收敛控制模块502,用于获取预配置的收敛策略,根据所述收敛策略指定的收敛维度,对执行到的日志打印函数的打印任务进行收敛控制,得到待打印日志。该收敛策略用于对日志的输出进行收敛控制。实施例中,收敛维度可以包括用户请求的用户标识(比如用户账号)、单位时间内的用户请求量、单位时间内的日志量和类路径中的任意一种或者多种。

每种收敛维度对应一种收敛控制的实现方式。对于用户标识这一收敛维度,则对用户标识进行哈希运算后与设定的切量值进行取余,得到余数,之后确定余数位于设定的切量范围内,允许执行日志打印函数。对于单位时间内的用户请求量这一收敛维度,则按照设定的取样比例,对单位时间收到的用户请求进行取样,确定用户请求命中取样,允许执行日志打印函数。

对于单位时间内的日志量这一收敛维度,则将日志打印函数对应的日志长度累加到日志长度变量,确定累加后的日志长度变量小于等于设定的长度阈值,允许执行日志打印函数;其中,日志长度变量用于记录当前累加的日志长度。对于类路径这一收敛维度,则确定日志打印函数的类路径不属于设定的目标路径,允许执行日志打印函数。

经过上述处理可以得到业务逻辑代码中所有允许被执行的日志打印函数,这些日志打印函数对应的日志构成待打印日志。

日志打印模块503,用于根据所述日志标识和设定的日志格式,对所述待打印日志进行格式化,得到日志信息,启动日志打印线程打印所述日志信息。该模块用于统一日志输出的格式。具体地,可以按照设定的日志格式,对待打印日志进行格式化,为了便于进行问题定位,在格式化过程中需要添加日志标识。

另外,本发明实施例的日志打印控制装置500还可以包括:日志编号模块(图5中未示出)。该模块用于根据所述日志打印函数在所述业务逻辑代码的执行顺序,对所述待打印日志进行编号,得到所述待打印日志的日志编号

从以上描述可以看出,通过在打印日志之前,使用配置的收敛策略对日志的输出进行收敛控制,同时在打印日志时增加日志标识,既能保证系统稳定运行,又能够在系统发生故障时,快速进行问题定位。

图6示出了可以应用本发明实施例的日志打印控制方法或日志打印控制装置的示例性系统架构600。

如图6所示,系统架构600可以包括终端设备601、602、603,网络604和服务器605。网络604用以在终端设备601、602、603和服务器605之间提供通信链路的介质。网络604可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

用户可以使用终端设备601、602、603通过网络604与服务器605交互,以接收或发送消息等。终端设备601、602、603上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。

终端设备601、602、603可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。

服务器605可以是提供各种服务的服务器,例如对用户利用终端设备601、602、603发送的用户请求进行处理的后台管理服务器。后台管理服务器可以执行业务代码逻辑,生成日志标识,对日志打印进行收敛控制,打印格式化后的日志信息等处理,并将处理结果(例如打印出的日志信息)反馈给终端设备。

需要说明的是,本申请实施例所提供的日志打印控制方法一般由服务器605执行,相应地,日志打印控制装置一般设置于服务器605中。

应该理解,图6中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。

根据本发明的实施例,本发明还提供了一种电子设备和一种计算机可读介质。

本发明的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例的一种日志打印控制方法。

本发明的计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例的一种日志打印控制方法。

下面参考图7,其示出了适用于来实现本发明实施例的电子设备的计算机系统700的结构示意图。图7示出的电子设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图7所示,计算机系统700包括中央处理单元(CPU)701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储部分708加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。在RAM 703中,还存储有计算机系统700操作所需的各种程序和数据。CPU 701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。

以下部件连接至I/O接口705:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至I/O接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。

特别地,根据本发明公开的实施例,上文主要步骤图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行主要步骤图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被中央处理单元(CPU)701执行时,执行本发明的系统中限定的上述功能。

需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。

附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括标识生成模块、收敛控制模块和日志打印模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,标识生成模块还可以被描述为“响应于用户请求,执行相应的业务逻辑代码,当所述业务逻辑代码执行到首个日志打印函数时,为所述用户请求生成相应的日志标识的模块”。

作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:响应于用户请求,执行相应的业务逻辑代码,当所述业务逻辑代码执行到首个日志打印函数时,为所述用户请求生成相应的日志标识;获取预配置的收敛策略,根据所述收敛策略指定的收敛维度,对执行到的日志打印函数的打印任务进行收敛控制,得到待打印日志;根据所述日志标识和设定的日志格式,对所述待打印日志进行格式化,得到日志信息,启动日志打印线程打印所述日志信息。

根据本发明实施例的技术方案,通过在打印日志之前,使用配置的收敛策略对日志的输出进行收敛控制,同时在打印日志时增加日志标识,既能保证系统稳定运行,又能够在系统发生故障时,快速进行问题定位。

上述产品可执行本发明实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明实施例所提供的方法。

上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

技术分类

06120114694719