日志生成方法及装置的制造方法

文档序号:9471280阅读:322来源:国知局
日志生成方法及装置的制造方法
【技术领域】
[0001]本发明属于信息技术领域,尤其涉及一种日志生成方法及装置。
【背景技术】
[0002]现有的业务应用系统(比如互联网应用系统)对日志系统的要求越来越高。为了后续的运维和大数据分析,通常需要以日志的形式将系统的大部分业务操作和数据进行记录。现有的日志生成方法主要包括Java语言日志库和C++日志库。然而,所述Java语言日志库,如Apache的开源代码项目log4j,日志的生成效率不高,且在大规模的互联网应用中使用时容易造成瓶颈;所述C++日志库的接口复杂,性能不足。

【发明内容】

[0003]鉴于此,本发明实施例提供了一种日志生成方法及装置,以提高日志文件的生成效率。
[0004]第一方面,提供了一种日志生成方法,所述方法包括:
[0005]当接收到日志生成请求时,获取待写入的日志数据,并将所述日志数据缓存至环形队列中;
[0006]根据所述环形队列的缓存空间,从所述环形队列中读取所述日志数据,并将所述日志数据按照预设方式写入存储器中,以生成日志文件。
[0007]第二方面,提供了一种日志生成装置,所述装置包括:
[0008]获取模块,用于当接收到日志生成请求时,获取待写入的日志数据,并将所述日志数据缓存至环形队列中;
[0009]写入模块,用于根据所述环形队列的缓存空间,从所述环形队列中读取所述日志数据,并将所述日志数据按照预设方式写入存储器中,以生成日志文件。
[0010]与现有技术相比,本发明实施例将日志的生成过程划分为日志数据的获取过程和写入过程,所述获取过程和写入过程之间采用环形队列进行数据通信;当接收到日志生成请求时,获取待写入的日志数据并将所述日志数据缓存至预设的环形队列中;在写入过程,则从所述环形队列中读取所述日志数据,并将所述日志数据按照预设方式写入存储器中,以生成日志文件。日志数据的获取过程和写入过程之间不存在加锁机制,从而有效地提高了日志文件的生成效率,为业务系统的高效运行提供了保证。
【附图说明】
[0011]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。
[0012]图1是本发明实施例提供的日志生成方法的实现流程图;
[0013]图2是本发明实施例提供的日志生成方法的另一实现流程图;
[0014]图3是本发明实施例提供的日志生成方法中步骤S202的具体实现示例;
[0015]图4是本发明实施例提供的环形队列的读写原理示意图;
[0016]图5是本发明实施例提供的日志生成装置的组成结构图。
【具体实施方式】
[0017]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0018]本发明实施例将日志的生成过程划分为日志数据的获取过程和写入过程,所述获取过程和写入过程之间采用环形队列进行数据通信;当接收到日志生成请求时,获取待写入的日志数据并将所述日志数据缓存至预设的环形队列中;在写入过程,从所述环形队列中读取所述日志数据,并将所述日志数据按照预设方式写入存储器中,以生成日志文件。日志数据的获取过程和写入过程之间不存在加锁机制,从而有效地提高了日志文件的生成效率,为业务系统的高效运行提供了保证。本发明实施例还提供了相应的装置,以下分别进行详细的说明。
[0019]图1示出了本发明实施例提供的日志生成方法的实现流程图,为了便于说明,仅示出了与本发明实施例相关的部分。
[0020]在本发明实施例中,所述方法应用于计算机,以将业务应用系统中的业务操作和数据生成对应的日志文件。
[0021 ] 参阅图1,所述方法包括:
[0022]在步骤SlOl中,当接收到日志生成请求时,获取待写入的日志数据,并将所述日志数据缓存至环形队列中。
[0023]本发明实施例将日志的生成过程划分为日志数据的获取过程和写入过程。所述获取过程和写入过程同步进行,每个过程可以设置I至N个线程参与工作。所述获取过程和写入过程的线程之间采用环形队列进行数据通信。因此,当接收到日志生成请求时,运行预设的一个或多个获取线程,通过所运行的获取线程中的每一个获取线程获取待写入的日志数据,并将所获取的日志数据写入到环形队列中,以缓存所述日志数据。
[0024]在步骤S102中,根据所述环形队列的缓存空间,从所述环形队列中读取所述日志数据,并将所述日志数据按照预设方式写入存储器中,以生成日志文件。
[0025]在写入过程,则运行预设的一个或多个写入线程,通过所运行的写入线程中的每一个写入线程从所述环形队列中读取日志数据,并将所读取的日志数据写入到存储器中,从而生成日志文件。可选地,所述写入线程采用异步1的方式将所述日志数据写入到存储器中。写入线程向存储器发送写入命令后,存储器根据所述命令自动接收日志数据,直至所述日志数据写入完毕后再通知写入线程。写入线程不需要等待日志数据完全写入存储器即可以返回,继续从所述环形队列中读取日志数据,从而提高了日志数据的写入速率。可选地,所述存储器为计算机外部存储器,比如磁盘。
[0026]在本发明实施例中,日志生成的过程划分为日志数据的获取过程和写入过程,所述日志数据的获取过程和写入过程之间通过环形队列进行数据通信,不存在加锁机制,日志数据的获取和写入效率高,从而有效地提高了日志文件的生成效率,为业务系统的高效运行提供了保证。
[0027]图2示出了本发明实施例提供的日志生成方法的另一实现流程。参阅图2,所述方法包括:
[0028]在步骤S201中,当获取到日志生成请求时,运行预设的多个获取线程,通过所述多个获取线程获取待写入的日志数据。
[0029]在步骤S202中,将所获取的日志数据写入到环形队列中以进行缓存。
[0030]在日志数据的获取过程中,通过运行多个获取线程来获取待写入的日志数据以及将日志数据写入到环形队列中,日志数据的获取效率高。
[0031]在写入过程中,则根据环形队列的缓存空间将其缓存的日志数据写入到存储器中,以生成日志文件。所述方法还包括:
[0032]在步骤S203中,运行预设的多个写入线程,由所述多个写入线程中的每一个写入线程根据其当前的待读取位置和最高待读取位从所述环形队列中读取日志数据。
[0033]在这里,所述当前的读取位置为所述写入线程对应的计数器上的值。所述最高待读取位为所述写入线程在所述环形队列中可读取的最高位,通常为写入线程前一次在环形队列中的写入位置。
[0034]在步骤S204中,将所读取的日志数据按照预设方式写入存储器中。
[0035]可选地,所述写入线程采用异步1的方式将所述日志数据写入到存储器中。写入线程不需要等待日志数据完全写入存储器即可以返回,继续从所述环形队列中读取日志数据,从而提高了日志数据的写入速率。
[0036]在本发明实施例中,每一个获取线程和写入线程都有对应的计数器,所述获取线程的计数器上的值表示所述线程当前在环形队列中的写入位置,所述写入线程的计数器上的值表示所述线程当前在环形队列中的读取位置,即写入线程当前的待读取位置。每个线程维护对应的计数器,并且只能修改对应的计数器,但是可以读取其他线程对应的计数器,也可以主动地将对应的计数器上的值通知其他线程。图3给出了步骤S202的一个具体实现示例。所述实现示例为一个写入线程将获取到的日志数据写入到环形队列的具体实现流程,包括:
[0037]在步骤S301中,当获取线程获取到待写入的日志数据时,获取所述获取线程在所述环形队列中的写入位置。
[0038]在步骤S302中,将所述日志数据写入到所获取的写入位置,并在写入完毕后将所述写入位置通知所有的写入线程,以使所述写入线程将最高待读取位更新为所述写入位置。
[0039]在步骤S303中,若所述写入位置为写入线程的待读取位置中的最低位时,进入等待模式。
[0040]在这里,获取线程一直获取待写入的日志数据,并重复步骤S301和S302,以将所获取的日志数据写入到环形队列中,直至获取到的写入位置为写入线程对应的待读取位置中的最低位。此时,所述环形队列已填满,暂无空余的写入位置,则暂停写入日志数据,进入等待模式,直到有空余的写入位置后再返回步骤S301。
[0041]示例性地,图4示出了环形队列的读写原理示意图。其中,获取线程I当前正在操作的写入位置为编号31,写入线程I当前的待读取位置为编号24,写入线程2当前的待读取位置为编号15,写入线程3当前的待读取位置为编号14。在日志数据写入完毕后,所述写入线程1、写入线程2、写入线程3的最高待读取位更新为编号31。所述写入线程I可批量读取编号24至31位置上的数据,写入线程2可批量读取编号15至31位置上的数据,写入线程3可批量读取编号14至31位置上的数据。而所述写入线程1、写入线程2、写入线程3对应的待读取位置中的最低位为编号14对应的位置。若获取线程I获取到的写入位置为所述编号14对应的位置时,则进入等待模式,直到有空余的写入位置后再将待写入的日志数据缓存至环形队列中。
[0042]综上所述,本发明实施例中的日志数据获取过程和写入过程分别运行多个线程,且获取线程和写入线程之间通过环形队列来进行数据通信,不存在加锁的机制,日志数据的获取和与入效率尚,从而有效地提尚了日志文件的生成效率,为业务系统的尚效运彳丁提供了保证。
[0043]图5示出了本发明实施例提供的日志生成装置的组成结构,为了便于说明,仅示出了与本发明实施例相关的部分。
[0044]在本发明实施例中
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1