日志处理方法及装置与流程

文档序号:11830585阅读:242来源:国知局
日志处理方法及装置与流程

本发明涉及计算机领域的计算机程序技术,尤其涉及日志处理方法及装置。



背景技术:

在程序(或系统)的开发、测试与以及实际运行的过程中,记录程序运行的日志至关重要,日志可以用于对程序的运行状态进行监控、以及在程序故障时进行问题排查。

日志中存储对程序运行过程中的各种信息,对于功能较复杂的大型应用来说,记录程序的运行会产生数据量很大的日志,这导致需要相当的存储空间来存储日志,存储海量的日志一方面会占用大量的存储资源,而出于节省存储资源的需求,可能只会存储最近一段时间的日志。这导致出现以下问题:

1)由于没有对日志进行全量存储,因此只能基于最近一段时间的运行日志进行问题排查,而无法对较久的时间(没有存储该段时间对应的日志)的历史问题进行排查;

2)只存储一段时间的日志,导致对于出现频率较低的问题也难以及时进行排查。

3)即使只存储程序最近一段时间运行的日志,仍然会占用大量的存储空间,同时,对海量的日志进行处理也影响了排查问题的效率。



技术实现要素:

本发明实施例提供一种日志处理方法及装置,能够全面高效排查程序运行中出现的问题,并节约日志的存储资源。

本发明实施例的技术方案是这样实现的:

第一方面,本发明实施例提供一种日志处理方法,所述方法包括:

获取程序在运行过程中输出的日志数据;

识别出所输出日志数据所属的不同级别;

检测程序运行的状态,确定所述程序运行的状态所满足的预设条件;

基于所述预设条件对应的所述第一级别的所述日志数据、第二级别的所述日志数据至少之一,形成对应所述程序从开始运行至满足所述预设条件的期间的日志文件;

基于至少一个所述期间的所述日志文件对所述程序产生的错误进行检测。

可选地,所述获取程序在运行过程中输出的日志数据,包括:

调用日志器实例记录所述程序输出的日志数据;

所述识别出所输出日志数据所属的不同级别,包括:

基于所述日志数据携带的级别关键字识别出以下级别至少之一的所述日志数据:调试级别;错误级别;信息级别;告警级别。

可选地,所述检测程序运行的状态,确定所述程序运行的状态所满足的预设条件,包括:

检测到所述程序运行期间未异常退出时,确定所述程序的运行状态满足正常运行结束的预设条件;

检测到所述程序运行期间异常退出时、确定所述程序的运行状态满足异常退出的预设条件。

可选地,所述基于所述程序运行的状态所满足的预设条件,基于所述预设条件对应的所述第一级别的所述日志数据、第二级别的所述日志数据至少之一,形成对应所述程序从开始运行至满足所述预设条件的期间的日志文件,包括:

将所述第二级别的所述日志数据写入所述日志文件,当所述程序的运行状态满足异常退出的预设条件时,将所述第一级别的所述日志数据写入所述日志文件,形成对应所述程序从开始运行至满足所述预设条件的期间的日志文件。

可选地,所述当所述程序的运行状态满足异常退出的预设条件时,将所述第一级别的所述日志数据写入所述日志文件,形成对应所述程序从开始运行至满足所述预设条件的期间的日志文件,包括:

将从所输出的日志数据中识别出的第一级别的日志数据入栈存储;

当所述程序的运行状态满足异常退出的预设条件时,以后进先出的顺序读取入栈存储的所述第一级别的日志数据并写入所述日志文件,形成对应所述程序从开始运行至满足所述预设条件的期间的日志文件;

清空入栈存储的所述第一级别的日志数据。

可选地,所述基于所述程序运行的状态所满足的预设条件,基于所述预设条件对应的所述第一级别的所述日志数据、第二级别的所述日志数据至少之一,形成对应所述程序从开始运行至满足所述预设条件的期间的日志文件,包括:

将所述第二级别的所述日志数据写入所述日志文件,当所述程序的运行状态满足正常运行结束的预设条件时,基于写入所述日志文件的所述第二级别的所述日志数据,形成对应所述程序从开始运行至满足所述预设条件的期间的日志文件。

可选地,所述当所述程序的运行状态满足正常运行结束的预设条件时,基于写入所述日志文件的所述第二级别的所述日志数据,包括:

将从所输出的日志数据中识别出的第一级别的日志数据入栈存储;

当所述程序的运行状态满足正常运行结束的预设条件时,清空入栈存储的所述第一级别的日志数据;

基于写入所述日志文件的第二级别的所述日志数据,形成对应所述程序从开始运行至满足所述预设条件的期间的日志文件。

可选地,所述第一级别为调试级别,所述第二级别以下级别至少之一:错误级别;信息级别;告警级别。

第二方面,本发明实施例提供一种日志处理装置,所述装置包括:

获取单元,用于获取程序在运行过程中输出的日志数据;

识别单元,用于识别出所输出日志数据所属的不同级别;

第一检测单元,用于检测程序运行的状态,确定所述程序运行的状态所满足的预设条件;

日志单元,用于基于所述预设条件对应的所述第一级别的所述日志数据、第二级别的所述日志数据至少之一,形成对应所述程序从开始运行至满足所述预设条件的期间的日志文件;

第二检测单元,用于基于至少一个所述期间的所述日志文件对所述程序产生的错误进行检测。

可选地,所述获取单元,还用于调用日志器实例记录所述程序输出的日志数据;

所述识别单元,还用于基于所述日志数据携带的级别关键字识别出以下级别至少之一的所述日志数据:调试级别;错误级别;信息级别;告警级别。

可选地,所述第一检测单元,还用于检测到所述程序运行期间未异常退出时,确定所述程序的运行状态满足正常运行结束的预设条件;检测到所述程序运行期间异常退出时、确定所述程序的运行状态满足异常退出的预设条件。

可选地,所述日志单元,还用于将所述第二级别的所述日志数据写入所述日志文件,当所述程序的运行状态满足异常退出的预设条件时,将所述第一级别的所述日志数据写入所述日志文件,形成对应所述程序从开始运行至满足所述预设条件的期间的日志文件。

可选地,所述日志单元,还用于将从所输出的日志数据中识别出的第一级别的日志数据入栈存储;当所述程序的运行状态满足异常退出的预设条件时,以后进先出的顺序读取入栈存储的所述第一级别的日志数据并写入所述日志文件,形成对应所述程序从开始运行至满足所述预设条件的期间的日志文件;清空入栈存储的所述第一级别的日志数据。

可选地,所述日志单元,还用于将所述第二级别的所述日志数据写入所述日志文件,当所述程序的运行状态满足正常运行结束的预设条件时,基于写入所述日志文件的所述第二级别的所述日志数据,形成对应所述程序从开始运行至满足所述预设条件的期间的日志文件。

可选地,所述日志单元,还用于将从所输出的日志数据中识别出的第一级别的日志数据入栈存储;当所述程序的运行状态满足正常运行结束的预设条件时,清空入栈存储的所述第一级别的日志数据;基于写入所述日志文件的第二级别的所述日志数据,形成对应所述程序从开始运行至满足所述预设条件的期间的日志文件。

第三方面,本发明实施例提供一种日志处理装置,所述装置包括:处理器和存储介质;所述存储介质中存储有供所述处理器执行的指令,所述可执行指令用于引起所述处理器执行以下的操作:

获取程序在运行过程中输出的日志数据;

识别出所输出日志数据所属的不同级别;

检测程序运行的状态,确定所述程序运行的状态所满足的预设条件;

基于所述预设条件对应的所述第一级别的所述日志数据、第二级别的所述日志数据至少之一,形成对应所述程序从开始运行至满足所述预设条件的期间的日志文件;

基于至少一个所述期间的所述日志文件对所述程序产生的错误进行检测。

第四方面,本发明实施例提供一种存储介质,所述存储介质中存储有可执行指令,所述可执行指令用于执行本发明实施例提供的日志处理方法。

本发明实施例具有以下有益效果:

1)有选择性的利用一种以上级别的日志数据形成日志文件,较利用程序输出的全部日志数据形成日志文件明显节省存储资源。即使在存储资源十分有限的情况下也可以存储程序长期运行的日志文件。从而,能够基于程序长期运行(例如,自程序在云平台上线以来的期间,或者是程序的整个测试的期间)的日志文件,对程序运行过程中出现频度较低的错误进行排查,当然,也可以对程序较早时间运行出现的历史问题进行排查。

2)根据程序运行的状态动态选择一种以上级别的日志数据形成日志文件,不仅节省存储空间,而且基于预设条件对应的级别选择相应级别的日志数据形成日志文件,较基于程序固定输出某一种或几种级别的日志数据形成日志文件,更能够满足对程序排查错误的需求。

附图说明

图1为本发明实施例中提供的对程序的日志进行滚动式处理的示意图;

图2为本发明实施例中日志处理装置的一个可选的硬件结构示意图;

图3为本发明实施例中日志处理装置的一个可选的应用场景示意图;

图4为本发明实施例中日志处理方法的一个可选的流程示意图;

图5为本发明实施例中形成日志文件的一个可选的流程示意图;

图6为本发明实施例中日志处理装置的一个可选的逻辑功能结构示意图。

具体实施方式

以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所提供的实施例仅仅用以解释本发明,并不用于限定本发明。另外,以下所提供的实施例是用于实施本发明的部分实施例,而非提供实施本发明的全部实施例,在本领域技术人员不付出创造性劳动的前提下,对以下实施例的技术方案进行重组所得的实施例、以及基于对发明所实施的其他实施例均属于本发明的保护范围。

需要说明的是,在本发明实施例中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的方法或者装置不仅包括所明确记载的要素,而且还包括没有明确列出的其他要素,或者是还包括为实施方法或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的方法或者装置中还存在另外的相关要素(例如方法中的步骤或者装置中的单元)。

本发明实施例中涉及的名词和术语适用于如下的解释。

函数:在各类编程语言中,函数是一种过程,也称为子程序,它执行一个指定的运算或操作。函数有内部函数或称标准函数,外部函数也即用户定义函数等。能被程序或主函数调用。例如,在C语言中,函数的形式分无参和有参两类。无参函数不带回或带回函数值。有参函数在调用和被调用间有传递数据(变量)。

栈:(stack),又名堆栈是一种数据结构,后进先出,即最后进入栈的数据最先弹出。是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

日志:记录程序执行的各个阶段的结果。

变量:变量是指在程序的运行过程中随时可以发生变化的量,与常量相对应。

在本发明一个实施例中,提供如图1所示的对程序的运行日志进行滚动式处理的方案,参见图1,每个表格代表程序在一个周期运行的日志,在日志数据库中,只记录最近一段时间如N(N的取值根据实际情况如可用的存储空间、需要监控的时间的长度等)个周期中程序运行的日志:随着程序运行时间的推移,在日志数据库写入最新的日志(实线表格标识),并删除陈旧的日志(虚线表格标识),从而使得日志数据库中存储的日志的数据量不会随时间出现不断增长的情况。

如果采用图1示出的日志处理方案,则至少存在以下问题:

1)日志数据库中的日志被删除之后,则无法对程序在相应时段的运行出现的问题进行排查。

2)对于出现频率较低的问题,仅仅基于最近N个周期的日志无法进行全面排查,导致无法对程序中存在的问题进行及时排查。

很多情况下需要从较长的时间跨度的日志对程序的运行监控或者问题的排查,在日志数据库中存储的日志的时间跨度有限,这就增大了对程序运行问题排查的难度,导致程序运行过程中一些出现频度低的问题无法被及时排查发现,如果对程序的运行过程中产生的日志进行全量存储,则会导致占用大量的存储资源,同样难以实施。

3)对于一些大型的、复杂的程序,即时仅仅在日志数据库中存储N个周期的日志,也会在日志数据库中占用大量的存储空间,海量的日志的数据导致利用日志对程序运行的问题进行排查的效率。

针对上述问题,本发明实施例提供日志处理方法、装置及存储介质,通过对程序运行的过程中输出的日志进行分级别处理,在程序的运行状态满足预设条件时,根据与预设条件对应级别的日志数据形成日志文件,通过预设条件对应的级别对处于特定状态的程序进行错误排查时所需的日志数据的级别进行动态控制,这样就不需要一直利用全部级别的日志数据来形成日志文件,即使对程序长期运行的日志数据形成日志文件,也能够达到节省了存储资源的效果,同时,也能够确保形成的日志文件包括有足够的对程序进行错误排查的日志数据。

本发明实施例可提供日志处理方法、以及应用日志处理方法的日志处理装置,日志处理装置可以采用服务器或服务器集群中的计算资源实现,图2示出了日志处理装置10的一个可选的硬件结构示意图,包括:处理器11、输入/输出接口12(例如显示器、键盘、触摸屏、扬声器麦克风中的一个或多个),存储介质13以及网络接口14,网络接口用于支持与外部设备的数据传输,组件可以经系统总线15连接通信。

需要指出的是,图2示出的日志处理装置10的硬件结构并非都是必需的,可以根据实际情况省略实施部分的硬件结构,或者,增设部分的硬件结构。另外,图2中示出的硬件结构在同一物理位置集中设置,或者分布设置在不同的物理位置,设置方式根据需要灵活选择。

日志处理装置的一个可选的应用场景示意图如图3所示,在图3中,日志处理装置实施为用于实施日志处理方法的服务器10,服务器10通过对云平台的30的程序、以及云平台40的程序运行的过程中输出的日志进行分级别处理,在程序的运行状态满足预设条件时,根据与预设条件对应级别的日志数据形成日志文件并存储在日志数据库20中。在需要时基于日志数据库20中的日志文件对程序在某一时段出现的错误进行排查,以下结合具体的流程示意图进行说明。

参见图4示出的日志处理方法的一个可选的流程示意图,包括以下步骤:

步骤101,获取程序在运行过程中输出的日志数据。

以图3为例,服务器10调用日志器(Logger)实例记录云平台30以及云平台40中的程序输出的日志数据,日志器是日志处理的核心组件。具有5种正常级别(Level),包括:

1)调试级别(static Level DEBUG)

DEBUG Level指出细粒度信息事件,对调试程序具有作用。

2)信息级别(static Level INFO)

INFO level表明消息在粗粒度级别上突出强调程序的运行过程。

3)告警级别(static Level WARN)

WARN level表明会出现潜在错误的情形。

4)错误级别(static Level ERROR)

ERROR level指出虽然发生错误事件,但仍然不影响程序的继续运行。

5)严重级别(static Level FATAL)

FATAL level指出每个严重的错误事件将会导致程序的退出。

另外,还有两个可用的特别的日志级别:

static Level ALL

ALL Level是最低等级的,用于打开所有日志。

static Level OFF

OFF Level是最高等级的,用于关闭所有日志。

日志器(Logger)的行为是分等级的。通过控制程序中相应级别的日志数据的开关,可以控制程序输出的日志数据的级别,本发明实施例中,控制程序输出所有级别的日志数据,并且有选择地形成记录日志数据的日志文件。

步骤102,识别出所输出日志数据所属的不同级别。

以图3为例,服务器基于云平台30中的程序输出日志数据携带的级别关键字,识别出上述级别的日志数据,类似地,服务器10基于云平台40中的程序输出的日志数据携带的关键字识别出相应日志数据的级别。

步骤103,检测程序运行的状态,确定程序运行的状态所满足的预设条件。

示例性地,预设条件为程序异常退出、程序正常运行结束。

在一个实施例中,预设条件为程序异常退出,相应地,当检测到程序运行的状态为异常退出时,则判定程序此时满足异常退出的预设条件。

在另一个实施例中,预设条件为程序正常运行结束,相应地,当程序的运行过程中未输出FATAL级别的日志数据时,则可以判定程序满足征程运行结束的预设条件。

步骤104,基于程序运行的状态所满足的预设条件,基于预设条件对应的第一级别的日志数据、第二级别的日志数据至少之一,形成对应程序从开始运行至满足预设条件的期间的日志文件。

步骤105,结合不同的预设条件形成相应日志文件的示例进行说明。

示例1)预设条件为程序异常退出

以图3为例,当云平台30中的程序出现异常退出的情况时,基于调试级别(第一级别)的日志数据、以及重要级别(第二级别)的日志数据,形成对应程序从开始运行至满足预设条件的期间的日志文件,这里,重要级别为前述的级别中除调试级别的任意一个级别,如错误级别、信息级别、告警级别等。

在一个实施例中,自程序开始运行时,一旦获取到程序输出的重要级别的日志数据,则将重要级别的日志数据写入日志文件。并且,当程序异常退出(也就程序的运行状态满足异常退出的预设条件时),将调试级别的日志数据也写入日志文件,从而基于调试级别的日志数据以及重要级别的日志数据,共同形成对应程序从开始运行至满足预设条件的期间的日志文件。

示例性地,为了提升在程序异常退出时将调试级别的日志数据写入对应日志文件的效率,在程序未异常退出或程序未运行结束之前,将程序输出的调试级别的日志数据以栈的方式存储,即后存储的日志数据被先读取(后进先出),同时在日志文件中写入重要级别的日志数据,当程序异常退出时,再从栈中与后进先出的方式读取入栈存储的调试级别的日志数据,结合已经写入日志的调试级别的日志数据,形成对应程序从开始运行至满足预设条件的期间的日志文件。

基于栈的方式可以提升在需要向日志文件写入调试级别日志数据的效率,同时,由于重要级别的日志数据是同步写入日志文件的,这就保证了日志文件生成的效率,特别是对于输出的日志数据的数据量很大的情况,能够显著降低生成日志文件的延迟。

鉴于程序产生的日志数据的数据量很大,在从栈中读取调试级别的日志数据之后,即可清空入栈存储的第一级别的日志数据,从而节约存储资源。

示例2)预设条件为程序正常运行结束

以图3为例,当云平台40中的程序出现异常退出的情况时,基于重要级别(第二级别)的日志数据,形成对应程序从开始运行至满足预设条件的期间的日志文件,这里,重要级别为前述的级别中除调试级别的任意一个级别,如错误级别、信息级别、告警级别等。

在一个实施例中,自程序开始运行时,一旦获取到程序输出的重要级别的日志数据,则将重要级别的日志数据写入日志文件,直至程序运行结束,当程序没有发生异常退出(也就程序的运行状态满足正常运行结束的预设条件时),由于程序没有发生异常退出的情况,因此不需要基于调试级别的日志数据形成日志文件,可以仅基于重要级别的日志数据形成对应程序从开始运行至满足预设条件的期间的日志文件,由于没有将调试级别的日志数据写入日志文件,因此显著降低了日志文件的数据量。

示例性地,在程序未异常退出或程序未运行结束之前,将程序输出的调试级别的日志数据以栈的方式存储,即后存储的日志数据被先读取(后进先出),同时在日志文件中写入重要级别的日志数据,同时,将程序输出的重要级别的日志手同步写入日志文件,这样当程序正常运行结束时,由于不需要利用调试级别的日志数据形成日志文件,则可清空入栈存储的第一级别的日志数据,从而节约存储资源,并利用已经写入日志文件的重要级别的日志数据,形成对应程序从开始运行至满足预设条件的期间的日志文件,也就是说,在程序运行征程结束时,相应的日志文件已经同步生成,不需要再进行额外的处理,提升了日志文件的生成效率,对于产生大量日志数据的程序来说,能够显著提升处理效率。

步骤105,基于至少一个期间的日志文件对程序产生的错误进行检测。

示例性地,利用程序在运行异常退出期间的日志数据进行错误排查,基于前述步骤得到相应的日志文件中存储有程序运行期间的调试级别的日志数据,因此可以对程序出现错误的原因进行精确排查。

示例性地,利用程序在正常运行结束期间的日志数据进行错误排查,基于前述步骤得到相应的日志文件中存储有程序运行期间的重要级别的日志数据,因此可以对程序出现的如告警级别、错误级别的排查。

再结合一个形成日志文件的示例进行说明,参见图5示出的形成日志文件的一个可选的流程示意图,在运行程序后获取程序输出的日志数据,对输出的日志数据的级别进行判断,若为调试级别的日志数据(如变量、函数名、函数结果等)则将调试级别的日志数据入栈存储,若为重要级别的日志数据则将重要级别的日志数据进行记录,也就是写入日志文件。

同时,检测程序的运行是否出现异常,若出现异常,则需要将入栈存储的调试级别的日志数据写入日志文件,形成程序在此次运行期间的日志文件。

若未检测到程序的运行出现异常,则继续获取程序输出的日志数据,判断是否调试级别的日志数据并进行相应的处理,直至满足以下之一:

1)检测到程序正常运行结束,利用已经记录到日志文件的重要级别的日志数据形成程序此次运行的日志文件。

2)检测到程序异常退出,将入栈存储的调试级别的日志数据出栈写入日志文件,连同日志文件中已经写入的重要级别的日志数据形成程序此次运行的日志文件。

发明人在实施本发明的过程中发现,实际应用中程序异常退出的情况一般较程序正常运行结束的次数要少,因此,仅在程序运行异常结束时利用调试级别和重要级别的日志数据形成日志文件将显著节省存储资源,从而即使在存储资源十分有限的情况下也可以存储程序长期运行的日志文件。进而,能够基于程序长期运行(例如,自程序在云平台上线以来的期间,或者是程序的整个测试的期间)的日志文件,对程序运行过程中出现频度较低的错误进行排查,当然,也可以对程序较早时间运行出现的历史问题进行排查。

对前述日志处理装置的功能结构进行说明,参见图6示出的日志处理装置的一个可选的逻辑功能结构示意图,需要指出的是,图6中示出的日志处理装置的逻辑功能结构仅仅是示例性的,基于图6示出的逻辑功能结构,本领域技术人员可以对其中的单元进行部分的合并或者进行进一步的拆分重组。

另外,图6中示出的逻辑功能结构中的各单元可以由图1中示出的硬件结构实现。

在图6中,日志处理装置50包括:获取单元51、识别单元52、第一检测单元53、日志单元54和第二检测单元55,下面对各单元进行说明。

获取单元51,用于获取程序在运行过程中输出的日志数据,例如调用日志器实例记录程序输出的日志数据。

以图3为例,服务器10调用日志器(Logger)实例记录云平台30以及云平台40中的程序输出的日志数据,日志器是日志处理的核心组件。具有5种正常级别(Level),包括:

1)调试级别(static Level DEBUG)

2)信息级别(static Level INFO)

INFO level表明消息在粗粒度级别上突出强调程序的运行过程。

3)告警级别(static Level WARN)

4)错误级别(static Level ERROR)

5)严重级别(static Level FATAL)

通过控制程序中相应级别的日志数据的开关,可以控制程序输出的日志数据的级别,本发明实施例中,控制程序输出所有级别的日志数据,并且有选择地形成记录日志数据的日志文件。

识别单元52,用于识别出所输出日志数据所属的不同级别,例如,基于日志数据携带的级别关键字识别出以下级别至少之一的日志数据:调试级别;错误级别;信息级别;告警级别。

以图3为例,识别单元52基于云平台10中的程序输出日志数据携带的级别关键字,识别出上述级别的日志数据,类似地,识别单元52基于云平台30中的程序输出的日志数据携带的关键字识别出相应日志数据的级别。

第一检测单元53,用于检测程序运行的状态,确定程序运行的状态所满足的预设条件。

示例性地,预设条件为程序异常退出、程序正常运行结束。

在一个实施例中,预设条件为程序异常退出,相应地,当第一检测单元53检测到程序运行的状态为异常退出时,则判定程序此时满足异常退出的预设条件。

在另一个实施例中,预设条件为程序正常运行结束,相应地,当第一检测单元53检测到程序的运行过程中未输出FATAL级别的日志数据时,则可以判定程序满足征程运行结束的预设条件。

日志单元54,用于基于预设条件对应的第一级别的日志数据、第二级别的日志数据至少之一,形成对应程序从开始运行至满足预设条件的期间的日志文件。

第二检测单元55,用于基于至少一个期间的日志文件对程序产生的错误进行检测。

在一个实施例中,第一检测单元53采用这样的方式检测预设条件是否满足:于检测到程序运行期间未异常退出时,确定程序的运行状态满足正常运行结束的预设条件;检测到程序运行期间异常退出时、确定程序的运行状态满足异常退出的预设条件。

结合不同的预设条件对日志文件的形成的示例进行说明。

示例1)预设条件为程序异常退出

在一个实施例中,日志单元54,用于将第二级别的日志数据写入日志文件,当程序的运行状态满足异常退出的预设条件时,将第一级别的日志数据写入日志文件,形成对应程序从开始运行至满足预设条件的期间的日志文件。

示例性地,日志单元54以栈的方式存储第一级别的日志数据:将从所输出的日志数据中识别出的第一级别的日志数据入栈存储;当程序的运行状态满足异常退出的预设条件时,以后进先出的顺序读取入栈存储的第一级别的日志数据并写入日志文件,形成对应程序从开始运行至满足预设条件的期间的日志文件;清空入栈存储的第一级别的日志数据。

基于栈的方式可以提升在需要向日志文件写入调试级别日志数据的效率,同时,由于重要级别的日志数据是同步写入日志文件的,这就保证了日志文件生成的效率,特别是对于输出的日志数据的数据量很大的情况,能够显著降低生成日志文件的延迟。

另外,鉴于程序产生的日志数据的数据量很大,在从栈中读取调试级别的日志数据之后,即可清空入栈存储的第一级别的日志数据,从而节约存储资源。

示例2)预设条件为程序正常运行结束

在一个实施例中,日志单元54,还用于将第二级别的日志数据写入日志文件,当程序的运行状态满足正常运行结束的预设条件时,基于写入日志文件的第二级别的日志数据,形成对应程序从开始运行至满足预设条件的期间的日志文件。

在一个实施例中,自程序开始运行时,一旦日志单元54获取到程序输出的重要级别的日志数据,则将重要级别的日志数据写入日志文件,直至程序运行结束,当程序没有发生异常退出(也就程序的运行状态满足正常运行结束的预设条件时),由于程序没有发生异常退出的情况,因此不需要基于调试级别的日志数据形成日志文件,可以仅基于重要级别的日志数据形成对应程序从开始运行至满足预设条件的期间的日志文件,由于没有将调试级别的日志数据写入日志文件,因此显著降低了日志文件的数据量。

示例性地,日志单元54以栈的方式存储第一级别的日志数据,在程序未异常退出或程序未运行结束之前,日志单元54将程序输出的调试级别的日志数据以栈的方式存储,即先存储的日志数据被先读取(后进先出),同时在日志文件中写入重要级别的日志数据,同时,将程序输出的重要级别的日志手同步写入日志文件,这样当程序正常运行结束时,由于不需要利用调试级别的日志数据形成日志文件,则可清空入栈存储的第一级别的日志数据,从而节约存储资源,并利用已经写入日志文件的重要级别的日志数据,形成对应程序从开始运行至满足预设条件的期间的日志文件,也就是说,在程序运行征程结束时,相应的日志文件已经同步生成,不需要再进行额外的处理,提升了日志文件的生成效率,对于产生大量日志数据的程序来说,能够显著提升处理效率。

第二检测单元55,用于基于至少一个期间的日志文件对程序产生的错误进行检测。

示例性地,利用程序在运行异常退出期间的日志数据进行错误排查,基于前述步骤得到相应的日志文件中存储有程序运行期间的调试级别的日志数据,因此可以对程序出现错误的原因进行精确排查。

示例性地,利用程序在正常运行结束期间的日志数据进行错误排查,基于前述步骤得到相应的日志文件中存储有程序运行期间的重要级别的日志数据,因此可以对程序出现的如告警级别、错误级别的排查。

本发明实施例至少实现了以下有益效果:

1)有选择性的利用一种以上级别的日志数据形成日志文件,较利用程序输出的全部日志数据形成日志文件明显节省存储资源。即使在存储资源十分有限的情况下也可以存储程序长期运行的日志文件。从而,能够基于程序长期运行(例如,自程序在云平台上线以来的期间,或者是程序的整个测试的期间)的日志文件,对程序运行过程中出现频度较低的错误进行排查,当然,也可以对程序较早时间运行出现的历史问题进行排查。

2)根据程序运行的状态动态选择一种以上级别的日志数据形成日志文件,不仅节省存储空间,而且基于预设条件对应的级别选择相应级别的日志数据形成日志文件,较使程序固定输出某一种或几种级别的日志数据形成日志文件,更能够满足对程序排查错误的需求。

本发明实施例所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质上实施的计算机程序产品的形式,所述存储介质包括但不限于U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁盘存储器、CD-ROM、光学存储器等。

本发明是根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括实施例以及落入本发明范围的所有变更和修改。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1