一种自动解析日志库中数据类型的方法及系统与流程

文档序号:11458478阅读:171来源:国知局
一种自动解析日志库中数据类型的方法及系统与流程

本发明涉及软件开发技术领域,具体来讲是一种自动解析日志库中数据类型的方法及系统。



背景技术:

开发人员在软件开发的过程中为了调试程序通常的做法是在程序里面进行日志打印。android系统原生的日志打印就是通过控制台(控制台是存放管理工具的框架,是由控制台的项定义的,包括控制台文件夹,其他容器、网页,以及其他管理项。控制台带有窗口,这些窗口能提供控制台树视图和由控制台树中的项引发的管理属性、服务及事件的视图)输出显示一串简单的字符串,开发人员通过查看该字符串来进行程序的调试。

但是,实际应用中,现有这种控制台显示日志的方式不太便于开发人员进行查看,其原因在于:开发人员在控制台输出的大量信息里面查看一串未按数据类型进行格式化输出的字符串是很麻烦的;而且,如果字符串长度过长,控制台也不会对其进行换行操作,导致超过页面显示的后续的部分数据会因显示不全而丢失。

因此,如何解决日志库中数据查看不方便的问题,是本领域技术人员亟待解决的问题。



技术实现要素:

本发明的目的是为了克服上述背景技术的不足,提供一种自动解析日志库中数据类型的方法及系统,能够自动解析/识别出需要输出的日志库中数据的类型,方便后续针对不同数据类型的数据进行格式化的输出,从而解决日志库中数据查看不方便的问题。

为达到以上目的,本发明采取的技术方案是:提供一种自动解析日志库中数据类型的方法,该方法包括以下步骤:创建通用日志打印函数,所述通用日志打印函数用于将待解析的日志库中的数据作为一个类对象的参数传递给自身内部的函数实现体,利用函数实现体完成数据类型的自动解析;在通用日志打印函数的函数实现体中,封装一个数据类型解析函数,并设置其实现功能为:根据通用日志打印函数传入的待解析的日志库中数据的参数,依次完成与预设数据类型的比对筛选和判定,并将判定结果返回。

在上述技术方案的基础上,所述预设数据类型包括数组类型、类类型和数值类型;其中,数值类型包括整数类型、浮点数类型、双精度浮点数类型和长整数类型。

在上述技术方案的基础上,数据类型解析函数根据通用日志打印函数传入的待解析的日志库中数据的参数,依次完成与预设数据类型的比对筛选和判定,并将判定结果返回时,具体包括以下流程:

步骤1、判断通用日志打印函数传入的待解析的日志库中数据的参数是否为空,若是,结束操作;若否,转入步骤2;

步骤2、判断通用日志打印函数传入的待解析的日志库中数据是否为数组类型的数据,若是,返回数组类型的判定结果,结束操作;若否,转入步骤3;

步骤3、判断通用日志打印函数传入的待解析的日志库中数据是否为类类型的数据,若是,返回类类型的判定结果,结束操作;若否,转入步骤4;

步骤4、判断通用日志打印函数传入的待解析的日志库中数据是否为数值类型的数据,若是,返回具体的数值类型,结束操作;若否,则以字符串形式返回日志库中数据相关的说明信息,结束操作。

在上述技术方案的基础上,所述预设数据类型还包括自定义解析类类型;数据类型解析函数完成预设数据类型的比对筛选和判定时,还包括对自定义解析类类型的比对筛选操作:

(1)通过for循环的方式找到预设的所有自定义解析类;

(2)判断通用日志打印函数传入的待解析的日志库中数据是否能与某个自定义解析类对应上,若是,返回对应上的具体自定义解析类,结束操作;若否,则进行其他预设数据类型的比对筛选和判定。

在上述技术方案的基础上,创建的通用日志打印函数为公有的静态函数。

本发明还提供一种自动解析日志库中数据类型的系统,该系统包括通用日志打印函数创建模块和数据类型解析函数封装模块;

所述通用日志打印函数创建模块用于:创建通用日志打印函数,所述通用日志打印函数用于将待解析的日志库中的数据作为一个类对象的参数传递给自身内部的函数实现体,利用函数实现体完成数据类型的自动解析;并向数据类型解析函数封装模块发送封装信号;

所述数据类型解析函数封装模块用于:收到封装信号后,在通用日志打印函数的函数实现体中,封装一个数据类型解析函数,并设置其实现功能为:根据通用日志打印函数传入的待解析的日志库中数据的参数,依次完成与预设数据类型的比对筛选和判定,并将判定结果返回。

在上述技术方案的基础上,所述预设数据类型包括数组类型、类类型和数值类型;其中,数值类型包括整数类型、浮点数类型、双精度浮点数类型和长整数类型。

在上述技术方案的基础上,数据类型解析函数根据通用日志打印函数传入的待解析的日志库中数据的参数,依次完成与预设数据类型的比对筛选和判定,并将判定结果返回时,具体包括以下流程:

判断通用日志打印函数传入的待解析的日志库中数据的参数是否为空,若是,结束操作;若否,判断通用日志打印函数传入的待解析的日志库中数据是否为数组类型的数据,若是,返回数组类型的判定结果,结束操作;若否,判断通用日志打印函数传入的待解析的日志库中数据是否为类类型的数据,若是,返回类类型的判定结果,结束操作;若否,判断通用日志打印函数传入的待解析的日志库中数据是否为数值类型的数据,若是,返回具体的数值类型,结束操作;若否,则以字符串形式返回日志库中数据相关的说明信息,结束操作。

在上述技术方案的基础上,所述预设数据类型还包括自定义解析类类型;数据类型解析函数完成预设数据类型的比对筛选和判定时,还包括对自定义解析类类型的比对筛选操作:通过for循环的方式找到预设的所有自定义解析类;判断通用日志打印函数传入的待解析的日志库中数据是否能与某个自定义解析类对应上,若是,返回对应上的具体自定义解析类,结束操作;若否,则进行其他预设数据类型的比对筛选和判定。

在上述技术方案的基础上,所述通用日志打印函数创建模块创建的通用日志打印函数为公有的静态函数。

本发明的有益效果在于:

(1)本发明中,通过创建一个通用日志打印函数,并在该函数的函数实现体中封装一个数据类型解析函数,利用该数据类型解析函数完成对日志库中数据的数据类型的自动解析。与现有技术相比,本发明能够自动解析出需要输出的日志库中数据的类型,方便后续针对不同数据类型的数据进行格式化的输出,从而解决日志库中数据查看不方便的问题,便于开发人员进行软件开发过程中的程序调试。

(2)本发明中,封装的数据类型解析函数根据通用日志打印函数传入的待解析的日志库中数据的参数,能依次完成与预设数据类型的比对筛选和判定,并将判定结果及时返回,操作逻辑清晰,合理,适用性强;并且,对于无法判定的数据,会以字符串形式直接将无法判定的数据中的描述信息返回出来,以便于后续的输出查看,保证了自动解析的可靠性。

(3)通过自定义解析类的方式实现了日志库中数据可以被自定义的解析类进行解析的目的,大大提高了数据类型解析的适应性。

(4)本发明中,将创建的通用日志打印函数设计为公有的静态函数,即publicstatic类型,使得其他函数能够在全局范围内非常轻易的对该函数进行访问和调用,从而方便实现日志库中数据类型的自动解析。与此同时,通用日志打印函数将待解析的日志库中的数据作为一个类对象(即object类对象)的参数传递给数据类型解析函数,这样的设计就使得创建的通用日志打印函数中能够接受任意的参数类型了,即接受的日志库中的数据可为任意数据类型,适用范围广。

附图说明

图1为本发明实施例中自动解析日志库中数据类型的方法的流程图;

图2为本发明实施例中数据类型解析函数完成预设数据类型的比对筛选和判定操作的具体流程图;

图3为本发明实施例中自动解析日志库中数据类型的系统的结构框图。

具体实施方式

下面结合附图及具体实施例对本发明作进一步的详细描述。

参见图1所示,本发明实施例提供一种自动解析日志库中数据类型的方法,包括以下步骤:

步骤s1、创建一个通用日志打印函数,所述通用日志打印函数用于将待解析的日志库中的数据作为一个类对象的参数传递给自身内部的函数实现体,利用函数实现体完成数据类型的自动解析。

可以理解的是,为了方便全局任何地方都能够使用上述创建的通用日志打印函数,将该函数定义为了一个公有(public)的静态(static)的函数。具体来说,该函数定义如下:

publicstaticvoidlog(objectobject){函数实现体}

本实施例中,对创建的通用日志打印函数做出上述定义设计的原因在于:public表示通用日志打印函数是一个公有的函数,公有函数能够被其他类进行访问,方便该函数被其他类所调用从而实现日志库中数据类型的自动解析。static表示创建的通用日志打印函数是一个静态函数,静态函数会被分配到静态区,这样就方便该函数可以在全局位置被访问和使用。void表示通用日志打印函数返回空数据,也就是该函数不返回任何数据。log是通用日志打印函数的名称。objectobject表示的是通用日志打印函数的参数,该参数是一个类对象(object)的参数且实际使用时将会是待解析的日志库中的数据。由于java语言的多态的特性,任何类的祖先类都是object类,所以参数object能够为任意的参数,这样的设计就使得创建的通用日志打印函数中能够接受任意的参数类型了,即接受的日志库中的数据可为任意数据类型。

步骤s2、在通用日志打印函数的函数实现体中封装一个数据类型解析函数,并对该数据类型解析函数的实现功能进行设置,使得该数据类型解析函数的实现功能为:根据通用日志打印函数传入的待解析的日志库中数据的参数,依次完成与预设数据类型的比对筛选和判定,并将判定结果返回。其中,预设数据类型包括:数组类型、类类型和数值类型;数值类型又包括整数类型(integer)、浮点数类型(float)、双精度浮点数类型(double)和长整数类型(long)。

可以理解的是,本实施例中将数据类型解析函数定义为一个私有的(private)函数,也就是说只有日志类(log类)才可以访问该函数,外界对该函数没有访问权限。具体来说,该函数定义如下:

privatestaticstringobjecttotype(objectobject)

其中,数据类型解析函数定义为static(静态)函数是由于通用日志打印函数本身是static类型的,在java中static类型的函数只能调用static类型的函数。string表示该函数将通过字符串返回解析好的类型,也就是说会返回该object是属于什么类型的数据。object就是上述通用日志打印函数传递进来的参数,即待解析的日志库中的数据。

进一步地,如图2所示,实际操作中,数据类型解析函数根据通用日志打印函数传入的待解析的日志库中数据的参数,依次完成与预设数据类型的比对筛选和判定,并将判定结果返回时,具体包括以下流程:

步骤1、判断通用日志打印函数传入的待解析的日志库中数据的参数是否为空,若是,结束操作;若否,则转入步骤2。本实施例中,使用的是if(object==null)的方式来进行判断的,如果为返回为null,则判定通用日志打印函数传入的待解析的日志库中数据的参数为空并结束下面的解析流程。

步骤2、判断通用日志打印函数传入的待解析的日志库中数据是否为数组类型的数据,若是,返回数组类型的判定结果,结束操作;若否,则转入步骤3。本实施例中,使用的是object.getclass().isarray()的方法来进行数组类型的比对判断的。如果object.getclass().isarray()这个方法返回的是真,那么表明待解析的日志库中数据(即object)是一个数组;如果object.getclass().isarray()这个方法返回的是假,那么表明这个数据不是一个数组。当判定是数组类型的数据时,就直接返回“islist”表明我们解析出来的日志库中数据是一个数组数据;当判定不是一个数组类型数据时,则继续进行下面的对比判定逻辑。

步骤3、判断通用日志打印函数传入的待解析的日志库中数据是否为类类型的数据,若是,返回类类型的判定结果,结束操作;若否,则转入步骤4。本实施例中,在进行类类型的比对判断时,使用的是if(object.tostring().startswith(object.getclass().getname()+"@"))的方法。如果待解析的日志库中数据(即object)是一个类,那么object的tostring方法将会是“类名@”这种形式。所以借助这样一个特性使用if(object.tostring().startswith(object.getclass().getname()+"@"))的方法来进行判定。判定过程首先是调用object中的tostring()方法,tostring()方法将会返回一串字符串;接着,调用字符串函数startswith(xxx)用于判定该字符串是不是以“xxx”开头的。object.getclass().getname()+"@"表明的是获取object的类名并将获取到的类名加上@符号。当if(object.tostring().startswith(object.getclass().getname()+"@"))这个方法返回的是真,那么表明待解析的日志库中数据(即object)是一个类,此时我们就返回“isclass”,这样后续我们就能够通过解析类的方式将数据进行格式化输出;当判定不是一个类类型的数据时,则继续进行下面的对比判定逻辑。

步骤4、判断通用日志打印函数传入的待解析的日志库中数据是否为数值类型的数据,若是,返回具体的数值类型(整数类型、浮点数类型、双精度浮点数类型或长整数类型),结束操作;若否,表明该数据为目前无法判定的特殊类型,则以字符串形式返回该数据相关的说明信息,结束操作。本实施例中,在判定日志库中数据是不是整数类型、浮点数类型、双精度浮点数类型或长整数类型时,具体是通过instanceof关键字来进行判定的,例如:ainstanceofb是用于判定a是不是b类型的数据。具体的判定代码如下:

if(objectinstanceofinteger)//判定是否为整数类型;

if(objectinstanceofdouble)//判定是否为双精度浮点数类型;

if(objectinstanceoffloat)//判定是否为浮点数类型;

if(objectinstanceoflong)//判定是否为长整数类型。

如果对应的判定为真,则相应返回“isinteger”,“isdouble”,“isfloat”,“islong”的判定结果。如果上述的判定为假,则说明该数据类型是我们目前无法判定的特殊类型,此时直接通过调用object.tostring()将object的tostring方法进行返回,tostring会返回日志库中数据(即object)相关的一些说明信息,这样后续我们也可以通过tostring方法来获取到该object中的一些相关信息,以便于后续的输出查看。

更进一步地,为了更好地提高数据类型解析函数对各种不同数据类型解析的适用性,使得数据类型解析函数能够适应自定义的解析情况,满足用户觉得已有的解析设置无法满足需求的时候可以通过自定义的方式来进行解析。本实施例中,预设数据类型中还增设有一种自定义解析类类型。在此基础上,数据类型解析函数完成预设数据类型的比对筛选和判定时,还包括对自定义解析类类型的比对筛选操作:

(1)通过for循环的方式找到预设的所有自定义解析类。本实施例中,采用for(parserparser:logconfig.getconfig().getparsers())的方法来实现,其中logconfig是预先定义好的配置文件的工具类,getconfig().getparsers()这个函数就是从我们的配置文件中取出所有的自定义解析类,然后通过for循环的方式遍历这些自定义解析类。

(2)判断通用日志打印函数传入的待解析的日志库中数据是否能与某个自定义解析类对应上,若是,返回对应上的具体自定义解析类,结束操作;若否,则进行其他预设数据类型的比对筛选和判定。本实施例中,判断日志库中数据能否与自定义解析类对应上时,是通过调用if(parser.parseclasstype().isassignablefrom(object.getclass()))的方法来实现的。其中,parser.parseclasstype()是获取预设的自定义解析类能够解析的类型,isassignablefrom(object.getclass())是判定自定义解析类能够解析的类型与待解析的日志库中数据所属的类型是否一致。如果一致,则直接调用自定义解析类型中的parser.parsestring(object)函数对该数据进行类型解析;如果不一致,则进行其他预设数据类型的比对筛选和判定,即进行上述步骤2~步骤4的操作。

利用本发明实施例的方法,能够全自动地解析/识别出日志库中数据的数据类型,方便后续针对不同数据类型的数据进行格式化的输出,从而解决现有技术中,查看日志库数据不方便的问题,便于开发人员进行软件开发过程中的程序调试。

参见图3所示,本发明实施例还提供一种自动解析日志库中数据类型的系统,该系统包括通用日志打印函数创建模块和数据类型解析函数封装模块。

其中,通用日志打印函数创建模块用于:创建通用日志打印函数,所述通用日志打印函数用于将待解析的日志库中的数据作为一个类对象的参数传递给自身内部的函数实现体,利用函数实现体完成数据类型的自动解析;并向数据类型解析函数封装模块发送封装信号。

数据类型解析函数封装模块用于:收到封装信号后,在通用日志打印函数的函数实现体中,封装一个数据类型解析函数,并设置其实现功能为:根据通用日志打印函数传入的待解析的日志库中数据的参数,依次完成与预设数据类型的比对筛选和判定,并将判定结果返回。

进一步地,数据类型解析函数根据通用日志打印函数传入的待解析的日志库中数据的参数,依次完成与预设数据类型的比对筛选和判定,并将判定结果返回时,具体包括以下流程:

判断通用日志打印函数传入的待解析的日志库中数据的参数是否为空,若是,结束操作;若否,判断通用日志打印函数传入的待解析的日志库中数据是否为数组类型的数据,若是,返回数组类型的判定结果,结束操作;若否,判断通用日志打印函数传入的待解析的日志库中数据是否为类类型的数据,若是,返回类类型的判定结果,结束操作;若否,判断通用日志打印函数传入的待解析的日志库中数据是否为数值类型的数据,若是,返回具体的数值类型,结束操作;若否,则以字符串形式返回日志库中数据相关的说明信息,结束操作。

更进一步地,为了更好地提高数据类型解析函数对各种不同数据类型解析的适用性,所述预设数据类型还包括自定义解析类类型。在此基础上,数据类型解析函数完成预设数据类型的比对筛选和判定时,还包括对自定义解析类类型的比对筛选操作:通过for循环的方式找到预设的所有自定义解析类;判断通用日志打印函数传入的待解析的日志库中数据是否能与某个自定义解析类对应上,若是,返回对应上的具体自定义解析类,结束操作;若否,则进行其他预设数据类型的比对筛选和判定。

需要说明的是:上述实施例提供的系统在进行实际操作时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。

本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。

本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

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