日志系统管理方法及日志系统的制作方法

文档序号:6355198阅读:96来源:国知局
专利名称:日志系统管理方法及日志系统的制作方法
技术领域
本发明涉及计算机技术领域,特别涉及ー种日志系统管理方法及日志系统。
背景技术
在软件开发领域,日志是用来监控和记录代码中变量变化、跟踪代码运行的轨迹、在开发环境中担当调试器的作用 ,用于向控制台或文件输出信息。在大型软件程序中,由于无法对程序进行调试,必须通过日志记录信息分析和评价程序的运行状态,进ー步通过分析日志记录信息找出程序运行中的问题所在。现有技术中的日志组件,从实现角度可以分为日志功能系统和日志抽象框架系统两大类;其中,日志功能系统(例如JDK Log、log4j)提供了独立、完整的日志记录功能,日志抽象框架(例如common-logging、slf4j)通过提取日志功能系统的抽象实现,对外提供支持主流的日志功能系统的公共接ロ,实现对大部分的日志功能系统进行统ー的操作和管理。日志功能系统虽然功能強大、速度快、使用简单,但是扩展性较差,并且功能単一,无法适应软件系统不断更新的发展趋势,而日志抽象框架由于结构比较复杂,用户操作起来比较繁琐。

发明内容
本发明的目的在于提供ー种日志系统管理方法及日志系统,提高日志系统的可扩展性和可操作性。本发明实施例提供ー种日志系统管理方法,包括在日志系统的接ロ层调用所述日志系统的底层实现层中的指定名称的日志对象,所述指定名称的日志对象在所述接ロ层已被进行统一的调用操作;获取对所述日志对象进行的与所述调用操作相对应的操作请求;在确定所述操作请求高于预设的有效级别后,创建与所述日志对象相对应的日志事件;将所述日志事件添加到与所述日志对象相关的输出端。本发明实施例提供一种日志系统,该日志系统能够实现上述技术方案的日志系统管理方法,其中,该系统包括调用模块,用于在日志系统的接ロ层调用所述日志系统的底层实现层中的指定名称的日志对象,所述指定名称的日志对象在所述接ロ层已被进行统一的调用操作;获取模块,用于获取对所述日志对象进行的与所述调用操作相对应的操作请求;创建模块,用于在确定所述操作请求高于预设的有效级别后,创建与所述日志对象相对应的日志事件;添加模块,用于将所述日志事件添加到与所述日志对象相关的输出端。本发明提供的日志系统管理方法及日志系统,由于日志对象在接ロ层已被进行统一的调用操作,当底层实现层的日志对象发生变化时,通过获取与调用操作相对应的操作请求,使得接ロ层中的日志用户端的代码和配置文件不会受到影响,实现了日志用户无需修改代码或者配置文件就可以获取到与指定名称的日志对象相对应的日志事件,因此提高了日志系统的扩展性和可操作性。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图I为本发明日志系统管理方法一个实施例的流程示意图;图2为本发明日志系统管理方法又一个实施例的流程示意图;图3为本发明日志系统ー个实施例的结构示意图;图4为本发明日志系统又ー个实施例的结构示意图;图5为本发明所适用的日志系统的结构示意图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。图I为本发明日志系统管理方法一个实施例的流程示意图,如图I所示,本实施例包括如下步骤步骤101、在日志系统的接ロ层调用该日志系统的底层实现层中的指定名称的日志对象,其中,该指定名称的日志对象在接ロ层已被进行统一的调用操作;步骤102、获取对该日志对象进行的与该操作请求相对应的操作请求;步骤103、在确定该操作请求高于预设的有效级别后,创建与该日志对象相对应的日志事件;步骤104、将该日志事件添加到与该日志对象相关的输出端。本发明实施例提供的日志系统管理方法,由于日志对象在接ロ层已被进行统一的调用操作,当底层实现层的日志对象发生变化时,通过获取与调用操作相对应的操作请求,使得接ロ层中的日志用户端的代码和配置文件不会受到影响,实现了日志用户无需修改代码或者配置文件就可以获取到与指定名称的日志对象相对应的日志事件,因此提高了日志系统的扩展性和可操作性。图2为本发明日志系统管理方法又一个实施例的流程示意图;如图2所示,本发明实施例包括步骤201、在日志系统的接ロ层调用该日志系统的底层实现层中的指定名称的日志对象,其中,该指定名称的日志对象在该接ロ层已被进行统一的调用操作;其中,可以在日志系统的接ロ层调用指定名称的日志对象;根据该日志对象的名称在该日志系统的底层实现层中的日志堆栈中获取该日志对象;日志系统的接ロ层提供统一的调用操作具体可以通过设置在接ロ层的接ロ方法实现,该接ロ方法例如可以为针对不同级别(该不同级别可以为编译、信息、警告、错误)采用的操作方法;通过在接ロ层对指定名称的日志对象进行统ー的调用操作,使得底层实现层中的日志对象均可以实现该调用操作,因此当日志系统的底层实现层发生变化时,不会影响到接ロ层的日志用户端的代码和配置文件。步骤202、获取对该日志对象进行的与该调用操作相对应的操作请求;其中,通过调用接ロ层的日志エ厂(LoggerFactory)类中的获取日志函数(getlogger)所对应的方法;日志エ厂类通过静态日志绑定(StaticLoggerBinder)类绑定ー个具体的实现类(该实现类例如可以为ILoggerFactory),并返回实现类(ILoggerFactory)相对应的子实现类(该子实现类例如可以为LoggerContext);日志上下文(LoggerContext)类中有个日志哈希(IoggerCache)表用于存放具体的日志(Logger)对象,因此通过日志函数所对应的方法(getLoggerO)函数可以从日志哈希(IoggerCache)中获取到指定名称的日志(Logger)对象。步骤203、在接ロ层确定是否需要放弃该操作请求;其中,对日志对象进行操作请求后,可以通过对该操作请求进行条件对比或者进行筛选,确定是否需要放弃该操作请求;例如可以通过调用获取条件过滤链函数(getTurboFilterChainDecision O)判断是否抛弃该操作请求,若返回拒绝(FilterReply. DENY),则抛弃请求,若返回接受(FilterReply. ACCEPT),则通过核对有效级别函数(checkeffectiveLevel)判断该操作请求的级别是否达到预设的有效级别。步骤204、若不需要抛弃该操作请求,则在该日志系统的绑定层判断该操作请求的级别是否高于预设的有效级别;其中,可以将日志系统中的预设的有效级别与该操作请求的级别进行对比,根据对比的关系确定该操作请求的级别是否高于预设的有效级别;本发明实施例所述的有效级另1J,具体可以分为跟踪(Trace)、信息(Infor)、编译(Debug)、警告(Warn)、错误(Error)五个级别,每ー个级别会对应ー个调用操作。步骤205、若该操作请求高于预设的有效级别,创建与该日志对象相对应的日志事件;此外,若该操作请求低于该有效级别,则可以抛弃该操作请求。步骤206、将该日志事件添加到与该日志对象相关的输出端;其中,可以将与该日志事件相对应的日志信息进行格式化,将格式化后的日志信息以日志事件的格式发送到与该日志对象相关的输出端;此外,本发明实施例所述的与调用操作相关的输出端具体可以包括控制台输出端和文件输出端,本发明实施例对于该两种 输出端的具体实现不做限制。本发明实施例提供的日志系统管理方法,由于日志对象在接ロ层已被进行统一的调用操作,当底层实现层的日志对象发生变化时,通过获取与调用操作相对应的操作请求,使得接ロ层中的日志用户端的代码和配置文件不会受到影响,实现了日志用户无需修改代码或者配置文件就可以获取到与指定名称的日志对象相对应的日志事件,因此提高了日志系统的扩展性和可操作性。
进ー步地,在上述图I和图2所示实施例中,当该日志系统运行该日志对象时,本发明实施例还可以包括若通过线程对该日志对象的全局变量进行操作,则在全局哈希容器中查找是否存在所述全局变量;若存在该全局变量,则在与所述全局变量对应的子哈希容器中查找是否存在与所述线程的线程名称相同的键值;若存在,则将所述日志对象的运行结果替换所述键值;若不存在,则创建ー个与所述日志对象的运行结果相对应的键值对;通过对不同的线程的相同的操作赋予不同的键值,可以很方便地实现通过统ー的配置文件在日志信息输出过程中根据不同的线程操作输出不同的内容和信息,从而极大地丰富和提高了日志系统的功能。 进ー步地,在上述图I和图2所示实施例中,在所述日志对象运行时,所述方法还包括若所述全局哈希容器中不存在所述全局变量,则在所述全局哈希容器中添加所述
全局变量;为所述全局变量添加一个子哈希容器;将所述线程的线程名称和操作结果作为新的哈希键值对添加到所述子哈希容器中。通过对不同的线程的相同的操作赋予不同的全局变量,可以很方便地实现通过统一的配置文件在日志信息输出过程中根据不同的线程操作输出不同的日志内容,因此极大地丰富和提闻了日志系统的功能。 在该日志系统运行该日志对象吋,为了更清楚的理解本发明实施例所述的技术方案,下面举例说明若存在全局变量Var,该日志系统中的所有的日志对象都可以对该全局变量Var进行操作,对每个线程相对应的该全局变量Var进行标记,因此在输出全局变量Var时就可以自动根据操作该全局变量Var的线程来输出相对应的键值;操作该全局变量的过程如下首先在哈希容器里查找有没有该全局变量Var ;若没有该全局变量Var,则创建该全局变量Var,若有该全局变量Var,则查找与该全局变量Var相对应的子哈希表;若该全局变量Var不存在子哈希表,则为该全局变量Var创建ー个子哈希表,并将操作该全局变量Var的线程名赋给第一个哈希表的键值,该全局变量Var的值赋给该全局变量Var的键值;若存在子哈希表,则继续查找子哈希表中是否存在操作该日志对象的线程名,若不存在子哈希表,则创建并将操作该全局变量Var的值赋给该全局变量Var。图3为本发明日志系统ー个实施例的结构示意图,本发明实施例可以实现上述图I和图2所示实施例的方法流程;如图3所示,本发明实施例包括调用模块31、获取模块32、创建模块33、添加模块34 ;其中,调用模块31在日志系统的接ロ层调用所述日志系统的底层实现层中的指定名称的日志对象,所述指定名称的日志对象在所述接ロ层已被进行统一的调用操作;获取模块32获取对所述日志对象进行的与所述调用操作相对应的操作请求;创建模块33在确定所述操作请求高于预设的有效级别后,创建与所述日志对象相对应的日志事件;添加模块34将所述日志事件添加到与所述日志对象相关的输出端。本发明实施例提供的日志系统,由于日志对象在接ロ层已被进行统一的调用操作,当底层实现层的日志对象发生变化时,通过获取模块32获取与调用操作相对应的操作请求,添加模块34将该日志事件添加到与该日志对象相关的输出端,从而使得接ロ层中的日志用户端的代码和配置文件不会受到影响,实现了日志用户无需修改代码或者配置文件就可以获取到与指定名称的日志对象相对应的日志事件,因此提高了日志系统的扩展性和可操作性。图4为本发明日志系统又ー个实施例的结构示意图,本发明实施例可以实现上述图I和图2所示实施例的方法流程;如图4所示,本发明实施例包括调用模块41、获取模块42、创建模块43、添加模块44 ;
其中,调用模块41在日志系统的接ロ层调用所述日志系统的底层实现层中的指定名称的日志对象,所述指定名称的日志对象在所述接ロ层已被进行统一的调用操作;获取模块42获取对所述日志对象进行的与所述调用操作相对应的操作请求;创建模块43在确定所述操作请求高于预设的有效级别后,创建与所述日志对象相对应的日志事件;添加模块44将所述日志事件添加到与所述日志对象相关的输出端。进ー步地,调用模块41还可以包括调用单元411、第一获取单元412 ;其中,调用単元411在日志系统的接ロ层调用指定名称的日志对象;第一获取单元412根据所述日志对象的名称在所述日志系统的底层实现层中的日志堆栈中获取该日志对象。进ー步地,获取模块42还可以包括确定单元421、判断単元422、第二获取单元423 ;其中,确定单元421在所述接ロ层确定是否需要放弃所述操作请求;若不需要抛弃所述操作请求,则判断単元422在所述日志系统的绑定层判断所述操作请求的级别是否高于预设的有效级别;在确定所述操作请求高于预设的有效级别后,第二获取单元423获取对所述日志对象进行的与所述调用操作相对应的操作请求。本发明实施例提供的日志系统,由于日志对象在接ロ层已被进行统一的调用操作,当底层实现层的日志对象发生变化时,通过获取模块42获取与调用操作相对应的操作请求,添加模块44将该日志事件添加到与该日志对象相关的输出端,从而使得接ロ层中的日志用户端的代码和配置文件不会受到影响,实现了日志用户无需修改代码或者配置文件就可以获取到与指定名称的日志对象相对应的日志事件,因此提高了日志系统的扩展性和可操作性。进ー步地,在所述日志系统运行所述日志对象时,在上述图3和图4所示实施例还可以包括第一查找模块、第二查找模块、创建模块;其中,若通过线程对所述日志对象的全局变量进行操作,则第一查找模块在全局哈希容器中查找是否存在所述全局变量;若存在全局变量,则第二查找模块在与所述全局变量对应的子哈希容器中查找是否存在与所述线程的线程名称相同的键值;若存在与所述线程的线程名称相同的键值,则创建模块将所述日志对象的运行结果替换所述键值;若不存在,则创建模块创建ー个与所述日志对象的运行结果相对应的键值对。进ー步地,在所述日志对象运行时,在上述图3和图4所示实施例还可以包括第ニ添加模块、第三添加模块、第四添加模块;其中,若所述全局哈希容器中不存在所述全局变量,则第二添加模块在所述全局哈希容器中添加所述全局变量;第三添加模块为所述全局变量添加一个子哈希容器;第四添加模块将所述线程的线程名称和操作结果作为新的哈希键值对添加到所述子哈希容器中。图5为本发明所适用的日志系统的结构示意图,如图5所示,本发明实施例分别为接ロ层51、绑定层52、底层实现层53 ;其中,接ロ层51是暴露给用户调用的操作层,在接ロ层51统ー了日志对象操作的方法,用以实现底层实现层53的透明化;在绑定层52可以将接ロ层51中的日志对象与底层实现层53中的日志对象进行绑定,具体地,可以采用动态绑定和静态绑定相结合的方式,例如可以在默认情况下或者是动态绑定失败时,采用静态绑定,可以在系统路径下有新的日志实现类并且动态加载成功,通过采用动态绑定,使得动态绑定和静态绑定相结合,从而实现了智能绑定;当对该日志系统的底层实现层53中的功能模块进行修改或者替换后,日志用户可以无需修改任何代码或者配置文件就可以软件系统的升级和迁移,使得本发明实施例中的日志系统和使用本发明实施例中的日志系统的软件系统具有极高的扩展性和可移植性。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、设备、模块和単元的具体工作过程,可以參考前述方法实施例中的对应过程,在此不再赘述。本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于ー计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管參照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。权利要求
1.ー种日志系统管理方法,其特征在于,包括 在日志系统的接ロ层调用所述日志系统的底层实现层中的指定名称的日志对象,所述指定名称的日志对象在所述接ロ层已被进行统一的调用操作; 获取对所述日志对象进行的与所述调用操作相对应的操作请求; 在确定所述操作请求高于预设的有效级别后,创建与所述日志对象相对应的日志事件; 将所述日志事件添加到与所述日志对象相关的输出端。
2.根据权利要求I所述的方法,其特征在干,所述在日志系统的接ロ层调用所述日志系统的底层实现层中的指定名称的日志对象包括 在日志系统的接ロ层调用指定名称的日志对象; 根据所述日志对象的名称在所述日志系统的底层实现层中的日志堆栈中获取该日志对象。
3.根据权利要求I所述的方法,其特征在于,所述方法还包括 在所述接ロ层确定是否需要放弃所述操作请求; 若不需要抛弃所述操作请求,则在所述日志系统的绑定层判断所述操作请求的级别是否高于预设的有效级别。
4.根据权利要求I 3任一所述的方法,其特征在于,在所述日志系统运行所述日志对象时,所述方法还包括 若通过线程对所述日志对象的全局变量进行操作,则在全局哈希容器中查找是否存在所述全局变量; 若存在与所述存在所述全局变量,则在与所述全局变量对应的子哈希容器中查找是否存在与所述线程的线程名称相同的键值; 若存在与所述线程的线程名称相同的键值,则将所述日志对象的运行结果替换所述键值;若不存在,则创建一个与所述日志对象的运行结果相对应的键值对。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括 若所述全局哈希容器中不存在所述全局变量,则在所述全局哈希容器中添加所述全局变量; 为所述全局变量添加一个子哈希容器; 将所述线程的线程名称和操作结果作为新的哈希键值对添加到所述子哈希容器中。
6.一种能够实现权利要求I 5任一所述方法的日志系统,其特征在于,包括 调用模块,用于在日志系统的接ロ层调用所述日志系统的底层实现层中的指定名称的日志对象,所述指定名称的日志对象在所述接ロ层已被进行统一的调用操作; 获取模块,用于获取对所述日志对象进行的与所述调用操作相对应的操作请求; 创建模块,用于在确定所述操作请求高于预设的有效级别后,创建与所述日志对象相对应的日志事件; 添加模块,用于将所述日志事件添加到与所述日志对象相关的输出端。
7.根据权利要求6所述的系统,其特征在于,所述调用模块包括 调用单元,用于在日志系统的接ロ层调用指定名称的日志对象; 第一获取单元,用于根据所述日志对象的名称在所述日志系统的底层实现层中的日志堆栈中获取该日志对象。
8.根据权利要求6所述的系统,其特征在于,所述获取模块包括 确定单元,用于在所述接ロ层确定是否需要放弃所述操作请求; 判断単元,用于若不需要抛弃所述操作请求,则在所述日志系统的绑定层判断所述操作请求的级别是否高于预设的有效级别; 第二获取单元,用于在确定所述操作请求高于预设的有效级别后,获取对所述日志对象进行的与所述调用操作相对应的操作请求。
9.根据权利要求6 8任一所述的系统,其特征在于,在所述日志系统运 行所述日志对象时,所述系统还包括 第一查找模块,用于若通过线程对所述日志对象的全局变量进行操作,则在全局哈希容器中查找是否存在所述全局变量; 第二查找模块,用于若存在所述全局变量,则在与所述全局变量对应的子哈希容器中查找是否存在与所述线程的线程名称相同的键值; 创建模块,用于若存在与所述线程的线程名称相同的键值,则将所述日志对象的运行结果替换所述键值;若不存在,则创建一个与所述日志对象的运行结果相对应的键值对。
10.根据权利要求9所述的系统,其特征在干,在所述日志对象运行吋,所述系统还包括 第二添加模块,用于若所述全局哈希容器中不存在所述全局变量,则在所述全局哈希容器中添加所述全局变量; 第三添加模块,用于为所述全局变量添加一个子哈希容器; 第四添加模块,用于将所述线程的线程名称和操作结果作为新的哈希键值对添加到所述子哈希容器中。
全文摘要
本发明涉及一种日志系统管理方法及日志系统,其中方法包括在日志系统的接口层调用所述日志系统的底层实现层中的指定名称的日志对象;获取对所述日志对象进行的与所述调用操作相对应的操作请求;在确定所述操作请求高于预设的有效级别后,创建与所述日志对象相对应的日志事件;将所述日志事件添加到与所述日志对象相关的输出端。本发明实施例提供日志系统管理方法及日志系统,实现了日志用户无需修改代码或者配置文件就可以获取到与指定名称的日志对象相对应的日志事件,因此提高了日志系统的扩展性和可操作性。
文档编号G06F11/34GK102650938SQ20111004819
公开日2012年8月29日 申请日期2011年2月28日 优先权日2011年2月28日
发明者刘旭东, 方琨, 朱泽坤, 李建欣, 赵永望 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1