一种json格式日志的生成方法及装置与流程

文档序号:11432169阅读:157来源:国知局
一种json格式日志的生成方法及装置与流程

本发明涉及日志生成技术领域,更具体地,涉及一种json格式日志的生成方法及装置。



背景技术:

在开发应用中,日志操作包log4j是apache的一个开源项目,通过使用log4j可以控制日志信息输送的目的地是控制台、文件或者gui组件等。在实际应用中,通常需要将字符串信息生成json格式的日志输出,能够将日志直观地展现在界面上。

目前,log4j只能将json格式的字符串生成json格式的日志,无法将外部传入的其它格式的字符串生成对应的json格式的日志。

而在实际应用中,希望能够将各种格式的自定义的字符串顺利生成json格式的日志,通过现有的log4j功能是无法实现的,这对log4j的功能造成了很大的限制,对开发人员也造成了很大的不便。



技术实现要素:

本发明提供一种克服上述问题或者至少部分地解决上述问题的json格式日志的生成方法及装置。

根据本发明的一个方面,提供一种json格式日志的生成方法,包括:

s1,获取插件调用事件对应的插件标识,并在日志操作包log4j中加载所述插件标识对应的插件;

s2,调用所述插件对配置文件进行解析,以从所述配置文件中得到需要生成json格式字符串的字段信息;

s3,再次调用所述插件,将所述字段信息生成对应的json格式的字符串,以便log4j将所述json格式的字符串生成对应的json格式的日志。

本发明的有益效果为:对原有的log4j进行扩展,通过扩展的插件可以将其它格式的字符串转换为json格式的字符串,实现了对原有的log4j功能的扩展,扩展后的log4j能够将其它格式的字符串生成json格式的字符串,进而生成json格式的日志。

在上述技术方案的基础上,本发明还可以作如下改进。

进一步的,所述步骤s1之前还包括:

利用log4j原有的抽象父类创建一个抽象子类,所述抽象子类继承所述抽象父类,用于将其它格式的字符串生成json格式的字符串;

将所述抽象子类作为log4j的插件。

进一步的,所述步骤s1之前还包括:

在log4j中编写配置文件,所述配置文件中包括插件调用事件对应的插件标识,以及与所述插件标识对应的插件的位置信息;

从而,所述步骤s1具体包括:

从所述配置文件中获取插件标识,根据该插件标识对应的插件的位置信息,查找到所述插件,并在log4j中加载所述插件。

进一步的,所述配置文件中还包括有按照log4j支持的格式配置的字段信息,其中,所述字段信息包括字段名称和字段名称对应的字段值。

进一步的,所述步骤s2具体包括:

调用所述插件对所述配置文件中的字段信息进行解析,将字段名称作为键值,将字段值作为属性值,以“键值-属性值”的格式保存于数据表中。

进一步的,所述步骤s2还包括:

当所述字段名称对应的字段值使用占位符表示时,所述插件将所述占位符解析为实际的字段值。

进一步的,所述步骤s3中再次调用所述插件,将所述字段信息生成对应的json格式的字符串具体包括:

将解析出来的字段名称和对应的字段值添加到插件的抽象子类中,利用所述抽象子类生成json格式的字符串。

根据本发明的另一个方面,还提供了一种json格式日志的生成装置,包括:

加载模块,用于获取插件调用事件对应的插件标识,并在log4j中加载所述插件标识对应的插件;

解析模块,用于调用所述插件对配置文件进行解析,以从所述配置文件中得到需要生成json格式字符串的字段信息;

生成模块,用于再次调用所述插件,将所述字段信息生成对应的json格式的字符串,以便log4j将所述json格式的字符串生成对应的json格式的日志。

进一步的,还包括编写模块;

所述编写模块,用于在log4j中编写配置文件,所述配置文件中包括插件调用事件对应的插件标识,以及与所述插件标识对应的插件的位置信息;

从而,所述加载模块具体用于:

从所述配置文件中获取插件标识,根据该插件标识对应的插件的位置信息,查找到所述插件,并在log4j中加载所述插件。

进一步的,所述配置文件中的字段信息包括字段名称和字段名称对应的字段值;

所述解析模块具体用于:

调用所述插件对所述配置文件中的字段信息进行解析,将字段名称作为键值,将字段值作为属性值,以“键值-属性值”的格式保存于数据表中。

附图说明

图1为本发明一个实施例的json格式日志的生成方法流程图;

图2为本发明另一个实施例的json格式日志的生成装置连接框图;

图3为本发明另一个实施例的json格式日志的生成装置整体连接框图;

图4为本发明又一个实施例的json格式日志的生成装置的测试设备连接框图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

参见图1,为本发明一个实施例的json格式日志的生成方法,包括:s1,获取插件调用事件对应的插件标识,并在日志操作包log4j中加载所述插件标识对应的插件;s2,调用所述插件对配置文件进行解析,以从配置文件中得到需要生成json格式字符串的字段信息;s3,再次调用所述插件,将所述字段信息生成对应的json格式的字符串,以便log4j将所述json格式的字符串生成对应的json格式的日志。

由于目前log4j只能将固定格式的字段信息生成json格式日志,而无法将外部传入的其它格式的字段信息生成json格式的日志,这对于实际应用来说是一个制约。因此,本实施例对已有的log4j进行扩展,对已有的log4j扩展一个插件,该插件能够将其它格式的字符串生成json格式的字符串,进而利用log4j原有的功能将得到的json格式的字符串生成对应的json格式的日志。

在将其它格式的字符串生成json格式的字符串时,本实施例采取log4j中的插件来完成,因此首先需要在log4j中加载插件。首先获取插件调用事件对应的插件标识,按照插件标识在log4j中加载对应的插件。然后使用插件对预先配置好的配置文件进行解析,从配置文件中解析出需要生成json格式字符串的字段信息,其中,字段信息包括字段名称和字段名称对应的字段值。再次调用插件,将解析出来的字段名称和对应的字段值生成对应的json格式的字符串,以便通过log4j原有的功能将json格式的字符串生成对应的json格式的日志,整个完成将其它格式的字符串通过扩展后的log4j生成json格式的日志。

本实施例对原有的log4j进行扩展,通过扩展的插件可以将其它格式的字符串转换为json格式的字符串,以便让log4j将其它格式的字符串生成json格式的日志,满足在开发过程中的实际需求。

在本发明的一个实施例中,所述步骤s1之前还包括:利用log4j原有的抽象父类创建一个抽象子类,所述抽象子类继承所述抽象父类,用于将其它格式的字符串生成json格式的字符串;将所述抽象子类作为log4j的插件。

在调用插件前,需要对log4j进行扩展,由于log4j的日志打印格式是由特定的类来定义的,均实现了org.apache.logging.log4j.core.layout.layout这个接口,所以本实施例可以通过实现该接口来进行扩展。在原有的log4j中已经有一个定义好的抽象类abstractstringlayout,该抽象类是生成字符串日志格式的抽象父类,而json串其实是一个特殊格式的字符串,因此可以通过继承该抽象父类,来创建一个抽象子类,代码如下:

通过上述创建的抽象子类可以将其它格式的字符串生成json格式的字符串。随后将该抽象子类扩展为log4j的插件,具体的实现如下:

@plugin(name="jobjsonlayout",category=node.category,

elementtype="layout",printobject=true)。

其中,name表示该插件的名称为jobjsonlayout,elementtype表示该插件的配置类型为layout。

在本发明的另一个实施例中,所述步骤s1之前还包括:在log4j中编写配置文件,所述配置文件中包括插件调用事件对应的插件标识,以及与所述插件标识对应的插件的位置信息;所述步骤s1具体包括:从所述配置文件中获取插件标识,并根据该插件标识对应的插件的位置信息,从内存中查找到该插件,并在log4j中加载该插件。

在执行上述步骤s1之前,需要在log4j中编写配置文件,配置文件的代码如下:

由上述代码可知,配置文件中指定了插件调用事件对应的插件标识,还需要在配置文件中指定插件标识对应的插件的位置。可以从配置文件中得到是否需要调用插件,具体调用哪个插件,当需要对插件进行调用时,根据配置文件中配置的插件标识,按照该插件标识对应的插件的位置去加载插件。其中,配置文件中还包括有按照log4j支持的格式配置的需要生成json格式字符串的字段信息,其中,所述字段信息包括字段名称和字段名称对应的字段值。代码中jobjsonlayout为需要调用的插件的标识,配置文件中的columnname1、columnname2和columnname3为字段信息的字段名称,value1、${ocean.job.pid}和value3为columnname1、columnname2和columnname3分别对应的字段值,其中,${ocean.job.pid}是使用占位符表示的字段值。配置文件中的每一个字段信息的格式为<字段名称>字段值</字段名称>。另外,在配置文件中还定义在最后生成json格式的日志时,是否需要写入日志的基本信息,其中,日志的基本信息包括日志的名称、日志中线程的名称、线程id以及线程的优先级。

在本发明的一个实施例中,所述步骤s2具体包括:调用所述插件对所述配置文件中的字段信息进行解析,将字段名称作为键值,将字段值作为属性值,以“键值-属性值”得格式保存于数据表中。

上述在log4j中编写了配置文件后,调用log4j中加载的插件对配置文件进行解析,从配置文件中解析出其中配置的字段信息,这些字段信息后续会生成json格式的字符串,将字段信息中的字段名称columnname作为主键,字段名称对应的字段值value作为属性值存储于数据表中。其中,当字段名称对应的字段值使用占位符表示时,可以使用log4j配置所提供的工具类将占位符解析为实际的字段值。

在本发明的一个实施例中,所述步骤s3中再次调用所述插件,将所述字段信息生成对应的json格式的字符串具体包括:将解析出来的字段名称和对应的字段值添加到插件的抽象子类中,利用所述抽象子类生成json格式的字符串。

上述实施例将配置文件中的字段信息解析出来后,本实施例将解析出来的字段名称和字段值对应添加到前述创建的抽象子类中,利用该抽象子类将填入的字段名称和对应的字段值生成json格式的字符串。本实施例中利用log4j中现有的工具类对占位符所代表的实际字段值进行解析,增强了耦合性,提高了解析过程的效率和稳定性。另外,可以灵活地解析配置文件中的字符串常量和占位符所对应的字段值,使得配置可以更加灵活多变,配置的字段值不仅限于固定的值。

调用插件中的抽象子类将其它格式的字段信息转换成了json格式的字符串,此时log4j可以根据现有的功能将转换好的json格式的字符串生成对应的json格式的日志。在将json格式的字符串生成json格式的日志时,判断配置文件中是否定义了需要写入日志的基本信息,如果需要,则在生成的json格式的日志中写入日志的基本信息。

参见图2,为本发明另一个实施例的json格式日志的生成装置,包括加载模块21、解析模块22和生成模块23。

加载模块21,用于获取插件调用事件对应的插件标识,并在log4j中加载所述插件标识对应的插件;

解析模块22,用于调用所述插件对配置文件进行解析,以从配置文件中得到需要生成json格式字符串的字段信息;

生成模块23,用于再次调用所述插件,将所述字段信息生成对应的json格式的字符串,以便log4j将所述json格式的字符串生成对应的json格式的日志。

参见图3,json格式日志的生成装置还包括创建模块20和编写模块24,所述创建模块20,用于利用log4j原有的抽象父类创建一个抽象子类,所述抽象子类继承所述抽象父类,用于将其它格式的字符串生成json格式的字符串;将所述抽象子类作为log4j的插件。

编写模块24,用于在log4j中编写配置文件,所述配置文件中包括插件调用事件对应的插件标识,以及与所述插件标识对应的插件的位置信息。

所述加载模块21具体用于,从所述配置文件中获取插件标识,根据该插件标识对应的插件的位置信息,查找到该插件,并在log4j中加载所述插件。其中,配置文件中还包括有按照log4j支持的格式配置的字段信息,其中,所述字段信息包括字段名称和字段名称对应的字段值。

所述解析模块22,具体用于:

调用所述插件对所述配置文件中的字段信息进行解析,将字段名称作为键值,将字段值作为属性值,以“键值-属性值”的格式保存于数据表中。其中,当字段名称对应的字段值使用占位符表示时,将占位符解析为实际的字段值。

所述生成模块23具体用于:

将所述解析模块22解析出来的字段名称和对应的字段值添加到插件的抽象子类中,利用抽象子类生成json格式的字符串,以便log4j将json格式的字符串生成对应的json格式的日志。

基于上述图2和图3对应实施例所提供的json格式日志的生成装置,本发明还提供了一种json格式日志的生成装置的测试设备。参见图4,该json格式日志的生成装置的测试设备包括:处理器(processor)401、存储器(memory)402、通信接口(communicationsinterface)403和总线404;

其中,处理器401、存储器402及通信接口403分别通过总线404完成相互间的通信;

通信接口403用于该测试设备与json格式日志的生成装置的通信设备之间的信息传输;

处理器401用于调用存储器402中的程序指令,以执行上述图1对应实施例所提供的json格式日志的生成方法,例如包括:获取插件调用事件对应的插件标识,并在log4j中加载所述插件标识对应的插件;调用所述插件对配置文件进行解析,以从配置文件中得到需要生成json格式字符串的字段信息;再次调用所述插件,将所述字段信息生成对应的json格式的字符串,以便log4j将所述json格式的字符串生成对应的json格式的日志。

本发明公开一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,该计算机程序包括程序指令,当程序指令被计算机执行时,计算机能够执行上述图1对应实施例所提供的json格式日志的生成方法,例如包括:获取插件调用事件对应的插件标识,并在log4j中加载所述插件标识对应的插件;调用所述插件对配置文件进行解析,以从配置文件中得到需要生成json格式字符串的字段信息;再次调用所述插件,将所述字段信息生成对应的json格式的字符串,以便log4j将所述json格式的字符串生成对应的json格式的日志。

本发明提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令使计算机执行上述图1对应实施例所提供的json格式日志的生成方法,例如包括:获取插件调用事件对应的插件标识,并在log4j中加载所述插件标识对应的插件;调用所述插件对配置文件进行解析,以从配置文件中得到需要生成json格式字符串的字段信息;再次调用所述插件,将所述字段信息生成对应的json格式的字符串,以便log4j将所述json格式的字符串生成对应的json格式的日志。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

以上所描述的json格式日志的生成装置的测试设备等实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分方法。

本发明提供的一种json格式日志的生成方法及装置,对原有的log4j进行扩展,通过扩展的插件可以将其它格式的字符串转换为json格式的字符串,实现了对原有的log4j功能的扩展,扩展后的log4j能够将其它格式的字符串生成json格式的字符串,进而生成json格式的日志。

最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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