发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种流输出的过滤方法及系统,将过滤分级信息分布式存储在模块本地的存储单元中,模块运行时从存储单元中获取过滤分级信息,在多任务/多CPU的并发系统中,在多个模块分布在不同的线程/任务的情况下,无需线程间的通信和保护,避免对共享数据区域的锁保护和串行化访问,实现了高并发性,有效地提高了过滤效率。
本发明提供一种流输出的过滤方法,其包括以下步骤:
将需要流输出的模块的过滤分级信息写入该模块的存储单元中;
模块运行时,从所述存储单元中提取所述过滤分级信息,对运行信息进行过滤后输出;
所述存储单元属于模块的数据结构体,所述数据结构体包括模块ID;
根据所述模块ID查找到对应的模块后,从所述数据结构体中获取所述存储单元,将配置给该模块的所述过滤分级信息写入所述存储单元。
在上述技术方案的基础上,所述过滤分级信息包括从高到低的多个日志级别,其中的一个日志级别为过滤级别。
在上述技术方案的基础上,模块运行时调用流输出接口,从所述存储单元获取所述过滤分级信息;
根据所述过滤分级信息对所述运行信息进行分级,并输出分级达到所述过滤级别以上的所述运行信息。
在上述技术方案的基础上,根据所述过滤分级信息对所述运行信息进行分级包括:
从所述流输出接口获取运行信息的用户设定级别;
判断所述用户设定级别是否与一个所述日志级别相同,若是,不作处理;若否,作出不合法提示告警,并将所述用户设定级别修改为默认日志级别,默认日志级别为一个所述日志级别。
本发明还提供一种流输出的过滤系统,用于应用软件,应用软件包括至少一个模块,所述系统包括:
配置单元,用于将需要流输出的模块的过滤分级信息配置到该模块的存储单元中;
存储单元,其设于每个模块中,用于存储配置的过滤分级信息;
处理单元,其设于每个模块中,用于在模块运行时,从所述存储单元中提取所述过滤分级信息,对运行信息进行过滤后输出;
所述存储单元属于模块的数据结构体,所述数据结构体包括模块ID;
所述配置单元用于根据所述模块ID查找到对应的模块后,从所述数据结构体中获取所述存储单元,将配置给该模块的所述过滤分级信息赋值到所述存储单元。
在上述技术方案的基础上,所述过滤分级信息包括从高到低的多个日志级别,其中的一个日志级别为过滤级别。
在上述技术方案的基础上,所述处理单元用于在模块运行时,从所述存储单元获取所述过滤分级信息;以及,根据所述过滤分级信息对所述运行信息进行分级,并输出分级达到所述过滤级别以上的所述运行信息。
与现有技术相比,本发明的优点如下:
(1)将过滤分级信息分布式存储在模块本地的存储单元中,模块运行时从存储单元中获取过滤分级信息,在多任务/多CPU的并发系统中,在多个模块分布在不同的线程/任务的情况下,无需线程间的通信和保护,避免对共享数据区域的锁保护和串行化访问,实现了高并发性,有效地提高了过滤效率。
(2)存储单元属于模块的数据结构体,模块访问存储单元时,不需要锁保护/信号量互斥等线程/任务间的通信手段和开销。
具体实施方式
下面结合附图及具体实施例对本发明作进一步的详细描述。
本发明第一实施例提供一种流输出的过滤方法,用于应用软件,例如路由器,交换机,光线路终端等通信设备的应用软件,参见图1所示,应用软件包括n个模块,n≥1,n个模块运行在不同的线程上。参见图2所示,本过滤方法包括以下步骤:
S110.将需要流输出的模块的过滤分级信息写入该模块的存储单元中。
S120.模块运行时,从所存储单元中提取过滤分级信息,对模块的运行信息进行过滤后输出。
运行信息包括记录设备或软件运行的状态变化、故障、调试和操作历史等信息。通常通信设备的软件均通过分级、分模块的日志来记录和获取设备运行过程中的故障、状态、调试等信息以供监测。
将过滤分级信息分布式存储在模块本地的存储单元中,模块运行时从存储单元中获取过滤分级信息,在多任务/多CPU的并发系统中,在多个模块分布在不同的线程/任务的情况下,无需线程间的通信和保护,避免对共享数据区域的锁保护和串行化访问,实现了高并发性,有效地提高了过滤效率。
本发明第二实施例提供一种流输出的过滤方法,应用软件包括n个模块,n≥1,n个模块运行在不同的线程上。本过滤方法包括以下步骤:
S210.将需要流输出的模块的过滤分级信息写入该模块的存储单元中。
具体的,存储单元属于模块的数据结构体,数据结构体包括模块ID。模块访问本地数据结构体中的存储单元时,不需要锁保护/信号量互斥等线程/任务间的通信手段和开销。根据模块ID查找到对应的模块后,从数据结构体中获取存储单元,将配置给该模块的过滤分级信息写入存储单元。
步骤S210的具体步骤参见图3所示:
S211.根据模块ID查找对应的模块。
S212.判断模块是否存在,若是,进入S213;若否,结束。
S213.从数据结构体中获取存储单元,配置给该模块的过滤分级信息写入存储单元。
S220.模块运行时,从存储单元中提取过滤分级信息,对模块的运行信息进行过滤后输出。
本发明第三实施例提供一种流输出的过滤方法,应用软件包括n个模块,n≥1,n个模块运行在不同的线程上。本过滤方法包括以下步骤:
S310.将需要流输出的模块的过滤分级信息写入该模块的存储单元中。
具体的,存储单元属于模块的数据结构体,数据结构体包括模块ID。模块访问本地数据结构体中的存储单元时,不需要锁保护/信号量互斥等线程/任务间的通信手段和开销。根据模块ID查找到对应的模块后,从数据结构体中获取存储单元,将配置给该模块的过滤分级信息写入存储单元。
具体的,过滤分级信息包括从高到低的多个日志级别,其中的一个日志级别为过滤级别。对于通信设备的应用软件来说,按日志级别来区分和控制输出的运行信息的严重程度,例如,日志级别包括致命错误(FATAL)、严重错误(ERROR)、告警(WARN)、审计(AUDIT)和调试(DEBUG)。致命错误是可导致程序设备跑飞、全部或关键功能失效的错误,严重错误是导致设备或软件部分功能失效、脱管和无法控制的错误,告警是可能导致设备出错和功能失效的问题,审计是记录设备运行的功能关键节点和各类逻辑分支,调试可用于跟踪记录设备各类运行信息和状态用于进行设备开发和问题追踪。可以理解的是,可根据应用软件的实际情况自定义日志级别。过滤条件可以设定为致命错误、严重错误、告警、审计或者调试。
S320.模块运行时,从所存储单元中提取过滤分级信息,对运行信息进行过滤后输出。
步骤S320的具体步骤包括:
S321.模块运行时调用流输出接口,从存储单元获取过滤分级信息。流输出接口是用户采用的记录日志的接口,该接口记录模块中一条日志语句采用的分类级别,例如,程序中的日志语句如下:
moduleA_Log_error(“…”),表示该句是严重错误ERROR级别的日志语句,用户设定级别为ERROR。
S322.根据过滤分级信息对运行信息进行分级,并输出分级达到过滤级别以上的运行信息。例如,当过滤条件设定为严重错误时,输出分级为致命错误和严重错误的运行信息,而告警的运行信息被过滤掉。
本发明第四实施例提供一种流输出的过滤方法,应用软件包括n个模块,n≥1,n个模块运行在不同的线程上。本过滤方法包括以下步骤:
S410.将需要流输出的模块的过滤分级信息写入该模块的存储单元中。
具体的,存储单元属于模块的数据结构体,数据结构体包括模块ID。模块访问本地数据结构体中的存储单元时,不需要锁保护/信号量互斥等线程/任务间的通信手段和开销。根据模块ID查找到对应的模块后,从数据结构体中获取存储单元,将配置给该模块的过滤分级信息写入存储单元。
具体的,过滤分级信息包括从高到低的多个日志级别,其中的一个日志级别为过滤级别。例如,日志级别包括致命错误(FATAL)、严重错误(ERROR)、告警(WARN)、审计(AUDIT)和调试(DEBUG),过滤条件可以设定为致命错误、严重错误、告警、审计或者调试。
S420.模块运行时,从所存储单元中提取过滤分级信息,对运行信息进行过滤后输出。
其中,根据过滤分级信息对运行信息进行分级包括:
从流输出接口获取运行信息的用户设定级别。判断用户设定级别是否与一个日志级别相同,若是,不作处理;若否,作出不合法提示告警,并将用户设定级别修改为默认日志级别,默认日志级别为一个日志级别。
具体的,模块运行时,调用预先创建的流输出接口,流输出接口带有模块ID;运行模块的线程根据模块ID访问数据结构体,以获取过滤分级信息;以及,调用流输出接口输出符合条件的运行信息。
参见图4所示,步骤S420的具体步骤包括:
S421.各模块运行中调用流输出接口进行相关信息的输出,流输出接口带有模块ID。
S422.模块所在线程/任务直接访问该模块的数据结构体,各线程/任务间可并发访问。
S423.从数据结构体的存储单元中获取步骤S410中配置流程中已配置好的过滤分级信息。
S424.检查用户设定级别的合法性,具体包括:从流输出接口获取运行信息的用户设定级别,判断用户设定级别是否与一个日志级别相同,即检查用户在模块的执行过程中所设定级别是否在配置的过滤分级信息范围内,若合法,则执行S427;若不合法,则执行S425。
其中,流输出接口是用户采用的记录日志的接口,该接口记录模块中一条日志语句采用的分类级别,例如,程序中的日志语句如下:
moduleA_Log_error(“…”),表示该句是严重错误ERROR级别的日志语句,用户设定级别为ERROR。
S425.作出不合法提示告警,例如在显示界面显示不合法提示,和/或,将不合法提示作为告警信息与运行信息一起输出。
S426.将用户设定级别修改为默认日志级别,默认日志级别为一个日志级别。例如,可以将不属于已配置的日志级别的用户设定级别统一设定为严重错误,也可以设定为任一个默认值,该默认值不同于已配置的日志级别。
S427.将运行信息的分级与过滤级别进行比较。
S428.根据过滤条件的比较,若用户设定级别低于过滤级别,则不输出,结束;否则执行S429。
S429.调用流输出接口完成模块的该条信息的输出,结束。
本过滤方法可避免多线程/任务访问集中式存储过滤信息时出现的串行化以及在全局数据区域中进行查找带来的检索开销,实现多线程/多任务的高并发性优势,提高了流输出的效率。
参见图5所示,本发明第五实施例提供一种流输出的过滤系统,用于应用软件,例如路由器,交换机,光线路终端等通信设备的应用软件,应用软件包括n个模块,n≥1,n个模块运行在不同的线程上。本系统包括配置单元以及设于每个模块中的存储单元和处理单元,配置单元与每个模块中的存储单元相连,每个模块中的存储单元和处理单元相连。
配置单元用于将需要流输出的模块的过滤分级信息配置到该模块的存储单元中。
存储单元用于存储配置的过滤分级信息;处理单元用于在模块运行时,从存储单元中提取过滤分级信息,对运行信息进行过滤后输出。
运行信息包括记录设备或软件运行的状态变化、故障、调试和操作历史等信息。通常通信设备的软件均通过分级、分模块的日志来记录和获取设备运行过程中的故障、状态、调试等信息以供监测。
将过滤分级信息分布式存储在模块本地的存储单元中,模块运行时从存储单元中获取过滤分级信息,在多任务/多CPU的并发系统中,在多个模块分布在不同的线程/任务的情况下,无需线程间的通信和保护,避免对共享数据区域的锁保护和串行化访问,实现了高并发性,有效地提高了过滤效率。
本发明第六实施例提供一种流输出的过滤系统,用于应用软件,应用软件包括n个模块,n≥1,n个模块运行在不同的线程上。本系统包括配置单元、以及设于每个模块中的存储单元和处理单元。
具体的,存储单元属于模块的数据结构体,数据结构体包括模块ID。模块访问本地数据结构体中的存储单元时,不需要锁保护/信号量互斥等线程/任务间的通信手段和开销。
配置单元用于根据模块ID查找到对应的模块后,从数据结构体中获取存储单元,将配置给该模块的过滤分级信息赋值到存储单元。
将过滤分级信息分布式存储在模块本地的存储单元中,模块运行时从存储单元中获取过滤分级信息,在多任务/多CPU的并发系统中,在多个模块分布在不同的线程/任务的情况下,无需线程间的通信和保护,避免对共享数据区域的锁保护和串行化访问,实现了高并发性,有效地提高了过滤效率。
本发明第七实施例提供一种流输出的过滤系统,用于应用软件,应用软件包括n个模块,n≥1,n个模块运行在不同的线程上。本系统包括配置单元、以及设于每个模块中的存储单元和处理单元。
具体的,存储单元属于模块的数据结构体,数据结构体包括模块ID。模块访问本地数据结构体中的存储单元时,不需要锁保护/信号量互斥等线程/任务间的通信手段和开销。
配置单元用于根据模块ID查找到对应的模块后,从数据结构体中获取存储单元,将配置给该模块的过滤分级信息赋值到存储单元。过滤分级信息包括从高到低的多个日志级别,其中的一个日志级别为过滤级别。
处理单元用于在模块运行时调用流输出接口,从存储单元获取过滤分级信息;以及,根据过滤分级信息对运行信息进行分级,并输出分级达到过滤级别以上的运行信息。
具体的,处理单元用于从流输出接口获取运行信息的用户设定级别。判断用户设定级别是否与一个日志级别相同,若是,不作处理;若否,作出不合法提示告警,并将用户设定级别修改为默认日志级别,默认日志级别为一个日志级别。
本过滤系统可避免多线程/任务访问集中式存储过滤信息时出现的串行化以及在全局数据区域中进行查找带来的检索开销,实现多线程/多任务的高并发性优势,提高了流输出的效率。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。