一种基于过滤条件的日志输出方法及装置与流程

文档序号:16627890发布日期:2019-01-16 06:17阅读:237来源:国知局
一种基于过滤条件的日志输出方法及装置与流程

本申请涉及日志信息处理技术领域,具体涉及一种基于过滤条件的日志输出方法及装置。



背景技术:

目前,人们通常通过计算机或者移动终端的日志(log)来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。其中,日志能够用来储存和记录系统运行情况以及用户使用情况的详细信息,这些信息是查看系统运行状态和排查问题的主要依据。例如,某个软件中应用程序出现崩溃情况,那么可以从程序事件日志中找到相应的记录,从而帮助相关技术人员分析并解决问题。

由此,每一个大型的系统项目,都会设计有log模块,用以记录并输出项目的系统日志,但是现有的log模块只能根据设置好的日志等级来选择输出哪些日志,还不能完全满足用户或其他使用者的需求,即无法实现个性化的日志输出。

因此,如何利用更先进的日志输出方式取代传统的输出方式,以实现根据用户或其他使用者的需求进行个性化日志输出,已成为亟待解决的问题。



技术实现要素:

为解决上述问题,本申请提供了一种基于过滤条件的日志输出方法及装置,具体技术方案如下:

第一方面,本申请提供了一种基于过滤条件的日志输出方法,所述方法包括:

注册过滤条件的指令;

根据所述过滤条件的指令,添加unregister指令;

增加对所述过滤条件的指令进行处理的代码;

通过所述代码,对所述过滤条件的指令进行处理,以实现基于过滤条件的日志输出。

在一种可选的实现方式中,所述过滤条件的指令包含用户指定输出的日志文件名和/或行号。

在一种可选的实现方式中,所述过滤条件的指令包括过滤条件添加指令、过滤条件列举指令和过滤条件删除指令中的至少一种。

在一种可选的实现方式中,所述通过所述代码,对所述过滤条件的指令进行处理,以实现基于过滤条件的日志输出,包括:

获取所述过滤条件的指令中传递的参数,其中,所述参数包含日志的文件名和/或行号;

将所述参数存储到容器map中,所述容器map还存储有所有过滤条件的指令;

调用所述map中存储的过滤条件,以实现基于过滤条件的日志输出。

在一种可选的实现方式中,所述调用所述map中存储的内容,以实现基于过滤条件的日志输出之前,还包括:

判断所述map是否为空;

如果否,则判断所述map中是否包含有指定的过滤条件,所述指定的过滤条件包含用户指定输出的日志文件名和/或行号;

如果是,则基于所述过滤条件进行日志输出。

第二方面,本申请提供了一种基于过滤条件的日志输出装置,所述装置包括:

注册单元,用于注册过滤条件的指令;

添加单元,用于根据所述过滤条件的指令,添加unregister指令;

增加单元,用于增加对所述过滤条件的指令进行处理的代码;

处理单元,用于通过所述代码,对所述过滤条件的指令进行处理,以实现基于过滤条件的日志输出。

在一种可选的实现方式中,所述过滤条件的指令包含用户指定输出的日志文件名和/或行号。

在一种可选的实现方式中,所述过滤条件的指令包括过滤条件添加指令、过滤条件列举指令和过滤条件删除指令中的至少一种。

在一种可选的实现方式中,所述处理单元包括:

获取子单元,用于获取所述过滤条件的指令中传递的参数,其中,所述参数包含日志的文件名和/或行号;

存储子单元,用于将所述参数存储到容器map中,所述容器map还存储有所有过滤条件的指令;

调用子单元,用于调用所述map中存储的过滤条件,以实现基于过滤条件的日志输出。

在一种可选的实现方式中,所述装置还包括:

第一判断单元,用于判断所述map是否为空;

第二判断单元,用于如果判断出所述map不为空,则判断所述map中是否包含有指定的过滤条件,所述指定的过滤条件包含用户指定输出的日志文件名和/或行号;

日志输出单元,用于如果判断出map中确实包含有指定的过滤条件,则基于所述过滤条件进行日志输出。

在本申请提供的基于过滤条件的日志输出方法中,首先在对象存储设备(objectstoragedevice,简称osd)模块中注册包含过滤条件的指令,然后根据该过滤条件的指令,添加相应的unregister指令的代码,接着,可以增加对该过滤条件的指令进行处理的相关代码,最后,可以通过增加的相关代码对该过滤条件的指令进行处理,以实现基于该过滤条件的日志输出,这样,可根据过滤条件的不同,实现日志的个性化输出。可见,本申请实施例不再根据预先设置好的日志等级来选择输出哪些日志,而是通过添加过滤条件的方式,基于添加的过滤条件实现日志的输出,从而可根据用户或其他使用者的需求设置不同的过滤条件,进而再基于这些个性化的过滤条件实现日志的个性化输出,即,实现了更好地根据实际需求来输出日志。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的一种基于过滤条件的日志输出方法的流程图;

图2为本申请实施例提供的对过滤条件的指令进行处理的流程图;

图3为本申请实施例提供的一种基于过滤条件的日志输出装置的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

为了便于理解本申请提供的技术方案,下面先对本申请技术方案的研究背景进行简单说明。

众所周知,正如背景技术中的描述,每一个大型的系统项目,都会设计有log模块,log是重要的调试手段,也是很好的学习入口。通过跟踪查看log不仅可以快速理解代码,还可以看到程序在不同时间都发生了什么,运行是否正确、合理等,同时,如果出现了问题(bug),工程师也可以通过分析log来确定问题出现的位置和原因,以便更快的解决bug。但是,现有的log模块只能根据设置好的日志等级来选择输出哪些日志,如果日志等级过大,可能会输出很多不需要的日志信息,且日志文件会占用很大的空间,如果日志等级过小,可能会造成很多需要的日志信息无法被输出。因此,现有的根据设置好的日志等级来选择输出日志的方式,还不能完全满足用户或其他使用者的需求,即无法实现个性化的日志输出。所以,如何利用利用更先进的日志输出方式取代传统的输出方式,以实现根据用户或其他使用者的需求进行个性化日志输出,已成为亟待解决的问题。

基于此,本申请提出了一种基于过滤条件的日志输出方法及装置,用于实现根据用户或其他使用者的需求进行个性化日志输出。

以下将结合附图对本申请实施例提供的基于过滤条件的日志输出方法进行详细说明。参见图1,其示出了本申请实施例提供的一种基于过滤条件的日志输出方法的流程图,本实施例可以包括以下步骤:

s101:注册过滤条件的指令。

在本实施例中,为了实现根据用户或其他使用者的需求进行个性化日志输出,首先可以在osd模块的log中注册过滤条件的指令,其中,一种可选的实现方式是,该注册过滤条件的指令可以包含用户指定输出的日志文件名和/或行号,也就是说,过滤条件是根据用户或其他使用者的需求而编写的代码,并可以将其添加到log中,其中,用户可以既指定输出日志的文件名和行号,也可以仅指定输出日志的文件名或仅指定输出日志的行号,若仅指定输出日志的文件名,则会输出该文件名对应的文件中的所有日志;若仅指定输出日志的行号,则会输出所有文件该行的日志。

在本申请一些可能的实现方式中,本步骤s101中的注册的过滤条件的指令可以为过滤条件添加指令、过滤条件列举指令和过滤条件删除指令中的至少一种。

在本实现方式中,过滤条件添加指令、过滤条件列举指令和过滤条件删除指令可分别表示为“log_filter_add”、“log_filter_list”、“log_filter_remove”,具体的指令代码实现如下:

s102:根据过滤条件的指令,添加unregister指令。

在本实施例中,通过步骤s101注册了过滤条件的指令后,为了实现根据用户或其他使用者的需求进行个性化日志输出,可以根据已注册的过滤条件的指令,添加相应的unregister指令,其中,unregister指令代码的具体实现如下:

cct->get_admin_socket()->unregister_command(“log_filter_add”);

cct->get_admin_socket()->unregister_command(“log_filter_list”);

cct->get_admin_socket()->unregister_command(“log_filter_remove”);

s103:增加对过滤条件的指令进行处理的代码。

在本实施例中,为了实现根据用户或其他使用者的需求进行个性化日志输出,还需要增加对步骤s101中注册的过滤条件的指令进行处理的代码,使其能够实现根据过滤条件输出日志的功能。

s104:通过该代码,对过滤条件的指令进行处理,以实现基于过滤条件的日志输出。

在本实施例中,通过步骤s103增加了对过滤条件的指令进行处理的代码后,进一步可以通过该代码,对过滤条件的指令进行处理,以实现基于过滤条件的日志输出。

在本申请一些可能的实现方式中,如图2所示,本步骤s104具体可以包括步骤s201-s203:

步骤s201:获取过滤条件的指令中传递的参数,其中,参数包括日志的文件名和/或行号。

在本实现方式中,通过步骤s103增加了对过滤条件的指令进行处理的代码后,可以利用该代码,首先获取到过滤条件的指令中传递的参数,其中,该参数包括可以包括用户指定输出的日志文件名和/或行号,并通过cmd_getval()函数来实现,现以过滤条件添加指令log_filter_add为例进行说明,可以通过如下指令代码获得用户指定输出的日志文件名和行号:

步骤s202:将参数存储到容器map中,其中,容器map还存储有所有过滤条件的指令。

在本实现方式中,通过步骤s201获取到过滤条件的指令中传递的参数后,可以将该参数存储到容器map中,其中,容器map还存储有所有过滤条件的指令。

具体来讲,可以将参数传递到log_filter_add()这个函数中,在这个函数中,可以实现将参数存储在用于存储所有过滤条件的一个容器map中。

此外,一种可选的实现方式是,在log_filter中,也包含log_filter_remove()函数,用以在该map中删除相应过滤条件。

现以过滤条件增加指令log_filter_add()为例进行说明,具体的指令代码如下:

步骤s203:调用map中存储的过滤条件,以实现基于过滤条件的日志输出。

在本实现方式中,通过步骤s202将用户指定的输出的日志文件名和/或行号作为参数存储到容器map中后,进一步可以调用map中存储的包含有该指定参数的过滤条件,以实现基于该过滤条件的日志输出。

在本申请一些可能的实现方式中,在执行步骤s203之前,本实施例还可以执行下述步骤a-c:

步骤a:判断map是否为空。

在本实现方式中,在将过滤条件存储在map中后,即可实现根据map中的内容,输出相应的日志,但在具体实现过程中,还可以首先添加一个bool类型的判断map是否为空的函数should_be_log(),如果map为非空,则返回true,如果map为空,则返回false,然后在实现日志输出的dout_impl中添加对于should_be_log的判断。

步骤b:如果否,则判断map中是否包含有指定的过滤条件,其中,指定的过滤条件包含用户指定输出的日志文件名和/或行号。

在本实现方式中,如果通过步骤a判断出map为非空,则可以进一步判断map中是否包含有指定的过滤条件,其中,指定的过滤条件指的是包含有用户指定输出的日志文件名和/或行号的过滤条件。

步骤c:如果是,则基于所述过滤条件进行日志输出。

在本实现方式中,如果通过步骤b判断出map中确实包含有指定的过滤条件,则可以基于该包含有用户指定输出的日志文件名和/或行号的过滤条件进行日志的个性化输出。

在本申请一些可能的实现方式中,本实施例最后还需要在初始的判断哪些日志要输出的bool型变量should_log中添加对于用户指定输出的日志文件名和行号的判断,如下指令代码中增加的带下划线的部分:

boolshould_log=crash||m_subs->get_log_level(sub)>=e->m_prio

||(strcmp(e->m_file,file.c_str())==0&&e->m_line==line)

进而即使没有到达预先设置的日志等级,但只要满足包含有用户指定输出的日志文件名和行号的过滤条件,即可根据该过滤条件输出相应日志。

这样,在本申请提供的基于过滤条件的日志输出方法中,首先在osd模块中注册包含过滤条件的指令,然后根据该过滤条件的指令,添加相应的unregister指令的代码,接着,可以增加对该过滤条件的指令进行处理的相关代码,最后,可以通过增加的相关代码对该过滤条件的指令进行处理,以实现基于该过滤条件的日志输出,这样,可根据过滤条件的不同,实现日志的个性化输出。可见,本申请实施例不再根据预先设置好的日志等级来选择输出哪些日志,而是通过添加过滤条件的方式,基于添加的过滤条件实现日志的输出,从而可根据用户或其他使用者的需求设置不同的过滤条件,进而再基于这些个性化的过滤条件实现日志的个性化输出,即,实现了更好地根据实际需求来输出日志。

上述实施例详细叙述了本申请方法的技术方案,相应地,本申请还提供了一种基于过滤条件的日志输出装置,下面对该装置进行介绍。

参见图3,图3是本申请实施例提供的一种基于过滤条件的日志输出装置的结构图,如图3所示,该装置包括:

注册单元301,用于注册过滤条件的指令;

添加单元302,用于根据所述过滤条件的指令,添加unregister指令;

增加单元303,用于增加对所述过滤条件的指令进行处理的代码;

处理单元304,用于通过所述代码,对所述过滤条件的指令进行处理,以实现基于过滤条件的日志输出。

可选地,所述过滤条件的指令包含用户指定输出的日志文件名和/或行号。

可选地,所述过滤条件的指令包括过滤条件添加指令、过滤条件列举指令和过滤条件删除指令中的至少一种。

可选地,所述处理单元304包括:

获取子单元,用于获取所述过滤条件的指令中传递的参数,其中,所述参数包含日志的文件名和/或行号;

存储子单元,用于将所述参数存储到容器map中,所述容器map还存储有所有过滤条件的指令;

调用子单元,用于调用所述map中存储的过滤条件,以实现基于过滤条件的日志输出。

可选地,所述装置还包括:

第一判断单元,用于判断所述map是否为空;

第二判断单元,用于如果判断出所述map不为空,则判断所述map中是否包含有指定的过滤条件,所述指定的过滤条件包含用户指定输出的日志文件名和/或行号;

日志输出单元,用于如果判断出map中确实包含有指定的过滤条件,则基于所述过滤条件进行日志输出。

这样,在本申请提供的基于过滤条件的日志输出装置中,首先在osd模块中注册包含过滤条件的指令,然后根据该过滤条件的指令,添加相应的unregister指令的代码,接着,可以增加对该过滤条件的指令进行处理的相关代码,最后,可以通过增加的相关代码对该过滤条件的指令进行处理,以实现基于该过滤条件的日志输出,这样,可根据过滤条件的不同,实现日志的个性化输出。可见,本申请实施例不再根据预先设置好的日志等级来选择输出哪些日志,而是通过添加过滤条件的方式,基于添加的过滤条件实现日志的输出,从而可根据用户或其他使用者的需求设置不同的过滤条件,进而再基于这些个性化的过滤条件实现日志的个性化输出,即,实现了更好地根据实际需求来输出日志。

需要说明的是,本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统或装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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