一种日志收集方法、装置、设备及计算机可读存储介质与流程

文档序号:20774826发布日期:2020-05-19 20:39阅读:173来源:国知局
一种日志收集方法、装置、设备及计算机可读存储介质与流程

本发明涉及存储技术领域,特别是涉及一种日志收集方法、装置、设备及计算机可读存储介质。



背景技术:

所谓日志(log)是指系统所指定对象的某些操作和其操作结果按时间有序的集合。每条日志记录描述了一次单独的系统事件,日志为服务器、工作站、防火墙和应用软件等it资源相关活动记录必要的、有价值的信息,这对系统监控、查询、报表和安全审计是十分重要的。因此,需要做好日志的收集工作。

目前,应用程序日志收集的普遍做法是从日志文件中收集日志,在日志收集过程中需要对日志文件进行大量的操作,影响日志写入日志文件的写入效率,导致日志写入阻塞,特别是日志写入频率很高时尤为明显,且日志收集效率低,占用大量的应用程序内存,影响应用程序的运行速度。

综上所述,如何有效地解决现有的从日志文件中收集日志的方式易导致日志写入阻塞,日志收集效率低,占用大量的应用程序内存,影响应用程序的运行速度等问题,是目前本领域技术人员急需解决的问题。



技术实现要素:

本发明的目的是提供一种日志收集方法,该方法较大地降低了日志写入阻塞的概率,提高了日志收集效率,较大地释放了应用程序内存,提高了应用程序的运行速度;本发明的另一目的是提供一种日志收集装置、设备及计算机可读存储介质。

为解决上述技术问题,本发明提供如下技术方案:

一种日志收集方法,包括:

当检测到存在日志生成时,从异步执行线程列表中读取日志打印线程及日志收集线程的线程执行优先级;其中,所述异步执行线程列表中预存有所述日志打印线程和所述日志收集线程的线程执行优先级;

当确定所述日志打印线程的线程执行优先级高于所述日志收集线程的线程执行优先级时,先启动所述日志打印线程调用日志框架接口进行日志打印,并在检测到日志打印完成后,启动所述日志收集线程调用所述日志框架接口进行日志收集;

当确定所述日志收集线程的线程执行优先级高于所述日志打印线程的线程执行优先级时,先启动所述日志收集线程调用所述日志框架接口进行日志收集,并在检测到日志收集完成后,启动所述日志打印线程调用所述日志框架接口进行日志打印。

在本发明的一种具体实施方式中,在启动日志收集线程调用所述日志框架接口进行日志收集之后,还包括:

调用消息中间件接口将收集到的日志信息发送到消息中间件。

在本发明的一种具体实施方式中,在调用消息中间件接口将收集到的日志信息发送到消息中间件之后,还包括:

对接收到的日志获取请求进行解析,得到日志类型信息;

调取所述日志类型信息对应的处理线程,从所述消息中间件中获取对应的日志信息,以对所述日志信息进行分析。

在本发明的一种具体实施方式中,在调取所述日志类型信息对应的处理线程,从所述消息中间件中调取对应的日志信息,以对所述日志信息进行分析之后,还包括:

对分析完成后的日志进行存储操作,以便进行问题排查。

在本发明的一种具体实施方式中,所述日志框架接口为通过对日志框架的源码包进行修改得到的。

在本发明的一种具体实施方式中,所述日志框架接口为通过对日志框架进行封装得到的。

一种日志收集装置,包括:

优先级读取模块,用于当检测到存在日志生成时,从异步执行线程列表中读取日志打印线程及日志收集线程的线程执行优先级;其中,所述异步执行线程列表中预存有所述日志打印线程和所述日志收集线程的线程执行优先级;

第一日志打印及收集模块,用于当确定所述日志打印线程的线程执行优先级高于所述日志收集线程的线程执行优先级时,先启动所述日志打印线程调用日志框架接口进行日志打印,并在检测到日志打印完成后,启动所述日志收集线程调用所述日志框架接口进行日志收集;

第二日志打印及收集模块,用于当确定所述日志收集线程的线程执行优先级高于所述日志打印线程的线程执行优先级时,先启动所述日志收集线程调用所述日志框架接口进行日志收集,并在检测到日志收集完成后,启动所述日志打印线程调用所述日志框架接口进行日志打印。

在本发明的一种具体实施方式中,还包括:

日志发送模块,用于在启动日志收集线程调用所述日志框架接口进行日志收集之后,调用消息中间件接口将收集到的日志信息发送到消息中间件。

一种日志收集设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如前所述日志收集方法的步骤。

一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如前所述日志收集方法的步骤。

本发明提供了一种日志收集方法:当检测到存在日志生成时,从异步执行线程列表中读取日志打印线程及日志收集线程的线程执行优先级;其中,异步执行线程列表中预存有日志打印线程和日志收集线程的线程执行优先级;当确定日志打印线程的线程执行优先级高于日志收集线程的线程执行优先级时,先启动日志打印线程调用日志框架接口进行日志打印,并在检测到日志打印完成后,启动日志收集线程调用日志框架接口进行日志收集;当确定日志收集线程的线程执行优先级高于日志打印线程的线程执行优先级时,先启动日志收集线程调用日志框架接口进行日志收集,并在检测到日志收集完成后,启动日志打印线程调用日志框架接口进行日志打印。

通过上述技术方案可知,通过预先设置异步执行线程列表,异步执行线程列表中存储有日志打印线程及日志收集线程两异步执行线程的线程执行优先级,当检测到日志生成时,根据线程执行优先级,通过日志打印线程及日志收集线程依次调取日志框架接口,完成日志打印和日志收集。相较于现有的从日志文件中收集日志的方式,本申请从源头上直接通过异步线程调取日志框架接口完成日志收集,较大地降低了日志写入阻塞的概率,提高了日志收集效率,较大地释放了应用程序内存,提高了应用程序的运行速度。

相应的,本发明实施例还提供了与上述日志收集方法相对应的日志收集装置、设备和计算机可读存储介质,具有上述技术效果,在此不再赘述。

附图说明

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

图1为本发明实施例中日志收集方法的一种实施流程图;

图2为本发明实施例中日志收集方法的另一种实施流程图;

图3为本发明实施例中日志收集方法的另一种实施流程图;

图4为本发明实施例中一种日志收集装置的结构框图;

图5为本发明实施例中一种日志收集设备的结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一:

参见图1,图1为本发明实施例中日志收集方法的一种实施流程图,该方法可以包括以下步骤:

s101:当检测到存在日志生成时,从异步执行线程列表中读取日志打印线程及日志收集线程的线程执行优先级。

其中,异步执行线程列表中预存有日志打印线程和日志收集线程的线程执行优先级。

可以预先创建存储有日志打印线程和日志收集线程的线程执行优先级的异步执行线程列表。可以实时或按照预先设定的时间间隔检测是否存在日志生成,当检测到存在日志生成时,从异步执行线程列表中读取日志打印线程及日志收集线程的线程执行优先级。

s102:当确定日志打印线程的线程执行优先级高于日志收集线程的线程执行优先级时,先启动日志打印线程调用日志框架接口进行日志打印,并在检测到日志打印完成后,启动日志收集线程调用日志框架接口进行日志收集。

可以预先部署供日志打印线程及日志收集线程调取的日志框架接口,当根据从异步执行线程列表中读取到的日志打印线程及日志收集线程的线程执行优先级,确定日志打印线程的线程执行优先级高于日志收集线程的线程执行优先级时,可以先启动日志打印线程调用日志框架接口进行日志打印。在日志打印过程中可以检测日志是否打印完成,当检测到日志打印完成后,启动日志收集线程调用日志框架接口进行日志收集。

s103:当确定日志收集线程的线程执行优先级高于日志打印线程的线程执行优先级时,先启动日志收集线程调用日志框架接口进行日志收集,并在检测到日志收集完成后,启动日志打印线程调用日志框架接口进行日志打印。

当根据从异步执行线程列表中读取到的日志打印线程及日志收集线程的线程执行优先级,确定日志收集线程的线程执行优先级高于日志打印线程的线程执行优先级时,可以先启动日志收集线程调用日志框架接口进行日志收集。在日志收集过程中可以检测日志是否收集完成,在检测到日志收集完成后,启动日志打印线程调用日志框架接口进行日志打印。通过对日志打印线程及日志收集线程进行异步调用,直接在日志产生的源头获取日志,去掉了日志文件操作的步骤,不会阻塞主线程的执行,从而不会影响程序运行效率。

通过上述技术方案可知,通过预先设置异步执行线程列表,异步执行线程列表中存储有日志打印线程及日志收集线程两异步执行线程的线程执行优先级,当检测到日志生成时,根据线程执行优先级,通过日志打印线程及日志收集线程依次调取日志框架接口,完成日志打印和日志收集。相较于现有的从日志文件中收集日志的方式,本申请从源头上直接通过异步线程调取日志框架接口完成日志收集,较大地降低了日志写入阻塞的概率,提高了日志收集效率,较大地释放了应用程序内存,提高了应用程序的运行速度。

需要说明的是,基于上述实施例一,本发明实施例还提供了相应的改进方案。在后续实施例中涉及与上述实施例一中相同步骤或相应步骤之间可相互参考,相应的有益效果也可相互参照,在下文的改进实施例中不再一一赘述。

实施例二:

参见图2,图2为本发明实施例中日志收集方法的另一种实施流程图,该方法可以包括以下步骤:

s201:当检测到存在日志生成时,从异步执行线程列表中读取日志打印线程及日志收集线程的线程执行优先级。

其中,异步执行线程列表中预存有日志打印线程和日志收集线程的线程执行优先级。

s202:当确定日志打印线程的线程执行优先级高于日志收集线程的线程执行优先级时,先启动日志打印线程调用通过对日志框架的源码包进行修改得到的日志框架接口进行日志打印,并在检测到日志打印完成后,启动日志收集线程调用通过对日志框架的源码包进行修改得到的日志框架接口进行日志收集。

可以预先通过对日志框架的源码包进行修改得到的日志框架接口,以便供日志打印线程及日志收集线程调用后进行相应的日志打印和日志收集操作。对日志框架的源码包进行修改得到的日志框架接口的过程可以包括:以java应用程序为例,打印日志一般会使用log4j日志框架,在log4j日志框架的源码包中多个地方都可以进行修改,在源码包中加入一个日志收集类,该处的修改指的是调用日志收集类,日志收集类是需要自定义实现的类,类的主要方法入参是日志内容,日志内容就是应用程序调用log4j日志框架的接口的传入的参数,可以在log4j的类中获取到,如在logger.debug(),logger.info(),logger.error()等方法中加入修改。

s203:当确定日志收集线程的线程执行优先级高于日志打印线程的线程执行优先级时,先启动日志收集线程调用通过对日志框架的源码包进行修改得到的日志框架接口进行日志收集,并在检测到日志收集完成后,启动日志打印线程调用通过对日志框架的源码包进行修改得到的日志框架接口进行日志打印。

s204:调用消息中间件接口将收集到的日志信息发送到消息中间件。

可以预先部署消息中间件和消息中间件接口,在收集到日志之后,可以调用消息中间件接口将收集到的日志信息发送到消息中间件。消息中间件的作用是作为缓存,因为当日志收集过快时,如果不加入消息中间件,后续日志分析时,会使得日志分析速度减慢,进而会造成i/o阻塞。通过将收集的日志在消息中间件中暂存,日志分析时可以从消息中间件中读取数据,从而充分利用了消息中间件的异步通信功能,提升对日志分析的分析效率,进一步降低发生i/o阻塞的概率。

s205:对接收到的日志获取请求进行解析,得到日志类型信息。

第三方需要获取日志时,可以发起日志获取请求,日志管理中心接收日志获取请求,通过对接收到的日志获取请求进行解析,得到日志类型信息,如debug,info,error等日志类型。

s206:调取日志类型信息对应的处理线程,从消息中间件中获取对应的日志信息,以对日志信息进行分析。

可以预先为不同类型的日志划分不同的处理线程,在解析得到日志获取请求对应的日志类型信息之后,可以调取日志类型信息对应的处理线程,从消息中间件中获取对应的日志信息,从而方便后续对日志信息进行分析。

s207:对分析完成后的日志进行存储操作,以便进行问题排查。

在对日志信息分析完成后,可以对分析完成后的日志进行存储操作,以便进行问题排查。分析完成后的日志可以包括日志获取请求对应的原收集的日志信息,除此之外还可以包括附加的日志分析结果等信息。

实施例三:

参见图3,图3为本发明实施例中日志收集方法的另一种实施流程图,该方法可以包括以下步骤:

s301:当检测到存在日志生成时,从异步执行线程列表中读取日志打印线程及日志收集线程的线程执行优先级。

其中,异步执行线程列表中预存有日志打印线程和日志收集线程的线程执行优先级。

s302:当确定日志打印线程的线程执行优先级高于日志收集线程的线程执行优先级时,先启动日志打印线程调用通过对日志框架进行封装得到的日志框架接口进行日志打印,并在检测到日志打印完成后,启动日志收集线程调用通过对日志框架进行封装得到的日志框架接口进行日志收集。

可以预先通过对日志框架进行封装得到的日志框架接口,承接上例,仍以log4j日志框架为例,通过对log4j日志框架一层封装,该封装实现了日志打印接口,如debug(),info(),error()等方法,在封装的方法中调用对应的log4j日志框架的logger.debug(),logger.info(),logger.error()等方法,并在封装的方法中异步调用日志收集类,从而可以不修改log4j日志框架的源码包,就完成对日志框架接口的异步调用,简单易实现。日志框架除log4j日志框架之外还有很多种,针对其他日志框架,处理思路可以参照log4j日志框架的处理思路。

s303:当确定日志收集线程的线程执行优先级高于日志打印线程的线程执行优先级时,先启动日志收集线程调用通过对日志框架进行封装得到的日志框架接口进行日志收集,并在检测到日志收集完成后,启动日志打印线程调用通过对日志框架进行封装得到的日志框架接口进行日志打印。

s304:调用消息中间件接口将收集到的日志信息发送到消息中间件。

s305:对接收到的日志获取请求进行解析,得到日志类型信息。

s306:调取日志类型信息对应的处理线程,从消息中间件中获取对应的日志信息,以对日志信息进行分析。

s307:对分析完成后的日志进行存储操作,以便进行问题排查。

相应于上面的方法实施例,本发明实施例还提供了一种日志收集装置,下文描述的日志收集装置与上文描述的日志收集方法可相互对应参照。

参见图4,图4为本发明实施例中一种日志收集装置的结构框图,该装置可以包括:

优先级读取模块41,用于当检测到存在日志生成时,从异步执行线程列表中读取日志打印线程及日志收集线程的线程执行优先级;其中,所述异步执行线程列表中预存有所述日志打印线程和所述日志收集线程的线程执行优先级;

第一日志打印及收集模块42,用于当确定所述日志打印线程的线程执行优先级高于所述日志收集线程的线程执行优先级时,先启动所述日志打印线程调用日志框架接口进行日志打印,并在检测到日志打印完成后,启动所述日志收集线程调用所述日志框架接口进行日志收集;

第二日志打印及收集模块43,用于当确定所述日志收集线程的线程执行优先级高于所述日志打印线程的线程执行优先级时,先启动所述日志收集线程调用所述日志框架接口进行日志收集,并在检测到日志收集完成后,启动所述日志打印线程调用所述日志框架接口进行日志打印。

通过上述技术方案可知,通过预先设置异步执行线程列表,异步执行线程列表中存储有日志打印线程及日志收集线程两异步执行线程的线程执行优先级,当检测到日志生成时,根据线程执行优先级,通过日志打印线程及日志收集线程依次调取日志框架接口,完成日志打印和日志收集。相较于现有的从日志文件中收集日志的方式,本申请从源头上直接通过异步线程调取日志框架接口完成日志收集,较大地降低了日志写入阻塞的概率,提高了日志收集效率,较大地释放了应用程序内存,提高了应用程序的运行速度。

在本发明的一种具体实施方式中,该装置还可以包括:

日志发送模块,用于在启动日志收集线程调用所述日志框架接口进行日志收集之后,调用消息中间件接口将收集到的日志信息发送到消息中间件。

在本发明的一种具体实施方式中,该装置还可以包括:

日志类型获得模块,用于在调用消息中间件接口将收集到的日志信息发送到消息中间件之后,对接收到的日志获取请求进行解析,得到日志类型信息;

日志信息获取模块,用于调取所述日志类型信息对应的处理线程,从所述消息中间件中获取对应的日志信息,以对所述日志信息进行分析。

在本发明的一种具体实施方式中,该装置还可以包括:

日志存储模块,用于在调取所述日志类型信息对应的处理线程,从所述消息中间件中调取对应的日志信息,以对所述日志信息进行分析之后,对分析完成后的日志进行存储操作,以便进行问题排查。

相应于上面的方法实施例,参见图5,图5为本发明所提供的日志收集设备的示意图,该设备可以包括:

存储器51,用于存储计算机程序;

处理器52,用于执行上述存储器51存储的计算机程序时可实现如下步骤:

当检测到存在日志生成时,从异步执行线程列表中读取日志打印线程及日志收集线程的线程执行优先级;其中,异步执行线程列表中预存有日志打印线程和日志收集线程的线程执行优先级;当确定日志打印线程的线程执行优先级高于日志收集线程的线程执行优先级时,先启动日志打印线程调用日志框架接口进行日志打印,并在检测到日志打印完成后,启动日志收集线程调用日志框架接口进行日志收集;当确定日志收集线程的线程执行优先级高于日志打印线程的线程执行优先级时,先启动日志收集线程调用日志框架接口进行日志收集,并在检测到日志收集完成后,启动日志打印线程调用日志框架接口进行日志打印。

对于本发明提供的设备的介绍请参照上述方法实施例,本发明在此不做赘述。

相应于上面的方法实施例,本发明还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现如下步骤:

当检测到存在日志生成时,从异步执行线程列表中读取日志打印线程及日志收集线程的线程执行优先级;其中,异步执行线程列表中预存有日志打印线程和日志收集线程的线程执行优先级;当确定日志打印线程的线程执行优先级高于日志收集线程的线程执行优先级时,先启动日志打印线程调用日志框架接口进行日志打印,并在检测到日志打印完成后,启动日志收集线程调用日志框架接口进行日志收集;当确定日志收集线程的线程执行优先级高于日志打印线程的线程执行优先级时,先启动日志收集线程调用日志框架接口进行日志收集,并在检测到日志收集完成后,启动日志打印线程调用日志框架接口进行日志打印。

该计算机可读存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

对于本发明提供的计算机可读存储介质的介绍请参照上述方法实施例,本发明在此不做赘述。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置、设备及计算机可读存储介质而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的技术方案及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

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