一种日志查询方法和系统的制作方法
【技术领域】
[0001 ]本发明涉及数据处理技术领域,尤其涉及一种日志查询方法和系统。
【背景技术】
[0002]随着移动通信网、互联网、物联网等信息技术的飞速发展,信息技术已经融入到人们的生活,遍布世界各地的各种通信终端、传感设备等产生了超过以往任何时代的巨量数据。与此同时,电子商务、社交网络的兴起每时每刻都在生成各种各样的数据。
[0003]海量的数据中蕴含着大量信息,从信息中可以提取大量有用价值。其中,网站采集的日志一般包含了大量人们一特别是产品分析人员感兴趣的信息,其记录了服务器接收处理请求以及运行时错误等各种原始信息,通过对这些日志进行分析和统计,能够有效掌握系统运行情况以及网站内容的受访问情况、加强对整个网站及其内容的维护与管理。而这些海量的日志数据通常为小文件,面对海量零散小文件的日志数据,如何高效的进行存储以及查询十分关键。
[0004]由于目前普遍使用的基于关系型数据库的存储查询方案在海量小文件数据存储和查询的条件下加载效率低、检索速度慢,因此需要一种能够适应海量小文件数据存储、查询等应用需求、提高数据查询效率的日志查询方案。
【发明内容】
[0005]鉴于此,本发明提供了一种新的日志查询方案,以力图解决或至少缓解上面存在的问题。
[0006]根据本发明的一个方面,提供了一种日志查询方法,该方法包括:接收采集的至少一条日志,日志包括日志来源、日志生成日期和日志生成时间;将接收的每一条日志存储为一个第一文件,该第一文件以该条日志的日志来源、日志生成日期和日志生成时间为存储路径;读取日志来源相同、日志生成日期相同和日志生成时间所属的时间段相同的存储路径下的至少一个第一文件;将该至少一个第一文件按照其中日志生成时间有序排列后合并为一个第二文件,该第二文件以第一文件中日志生成时间为索引,并以日志来源、日志生成日期和日志生成时间所属的时间段为存储路径;接收用户的日志分页查询请求,获取相应存储路径下的第二文件,对获取的第二文件进行分页查询后将查询结果返回至用户。
[0007]可选地,在根据本发明的方法中,在将接收的每一条日志存储为一个第一文件的步骤之前,还包括:解析日志内容,判断日志是否为无效日志,若是则将该条日志删除。
[0008]可选地,在根据本发明的方法中,该日志分页查询请求包括日志来源、日志生成日期、日志生成时间、页起始行和每页日志条数,获取相应存储路径下的第二文件,对获取的第二文件进行分页查询后将查询结果返回至用户的步骤包括:根据日志分页查询请求中的日志来源、日志生成日期和日志生成时间确定第二文件的存储路径,读取该存储路径下的第二文件;读取第二文件中该日志生成时间对应的一条日志,并以该条日志作为行号为第I行的日志;根据该页起始行和每页日志条数确定该页的页结束行;读取并存储第二文件中第I行日志后行号为该页起始行至页结束行的所有日志为查询结果。
[0009]可选地,在根据本发明的方法中,读取第二文件中日志生成时间对应的一条日志的步骤包括:查询第二文件的索引,若索引中存在该日志生成时间,则读取第二文件中该日志生成时间对应的一条日志;以及若索引中不存在该日志生成时间,则查询索引中与该日志生成时间最接近的日志生成时间,读取第二文件中最接近的日志生成时间对应的一条日
V1、1、O
[0010]可选地,在根据本发明的方法中,在读取并存储第二文件中第I行日志后行号为该页起始行至页结束行的所有日志为查询结果的步骤之前,还包括:根据每页日志条数判断该页起始行是否位于第一页。
[0011 ]可选地,在根据本发明的方法中,若页起始行位于第一页,则令该页起始行为第I行,读取并存储第二文件中第I行日志后行号为该页起始行至页结束行的所有日志为查询结果的步骤包括:将第I行的日志存储至查询结果;以第二文件中该第I行的日志为起始,重复读取下一条日志、将该条日志存储至查询结果,直至重复次数为每页日志条数减去I。
[0012]可选地,在根据本发明的方法中,若页起始行不是位于第一页,则读取并存储第二文件中第I行日志后行号为该页起始行至页结束行的所有日志为查询结果的步骤包括:以第二文件中第I行的日志为起始,重复读取下一条日志直至重复次数为页起始行减去2;继续重复读取下一条日志、将该条日志存储至查询结果,直至重复次数为每页日志条数。
[0013]可选地,在根据本发明的方法中,还包括:根据页起始行和每页日志条数确定下一页的页起始行,将该下一页的页起始行存储至查询结果。
[0014]可选地,在根据本发明的方法中,其中每一条日志为一行,页结束行为页起始行加上每页日志条数后减去I,下一页的页起始行为该页起始行加上每页日志条数。
[0015]可选地,在根据本发明的方法中,第二文件为MapfiIe文件。
[0016]根据本发明的另一个方面,还提供了一种日志查询系统,该系统包括:接收模块,适于接收采集的至少一条日志,该日志包括日志来源和日志时间;还适于将接收的每一条日志存储为一个第一文件,该第一文件以该条日志的日志来源、日志生成日期和日志生成时间为存储路径;合并模块,适于读取日志来源相同、日志生成日期相同和日志生成时间所属的时间段相同的存储路径下的至少一个第一文件;还适于将至少一个第一文件按照其中日志生成时间有序排列后合并为一个第二文件,该第二文件以第一文件中日志生成时间为索引,并以日志来源、日志生成日期和日志生成时间所属的时间段为存储路径;查询模块,适于接收用户的日志分页查询请求,获取相应存储路径下的第二文件,对获取的第二文件进行分页查询后将查询结果返回至用户;以及存储模块,适于存储第一文件和第二文件。
[0017]可选地,在根据本发明的系统中,接收模块还适于在将接收的每一条日志存储为一个第一文件之前,解析日志内容,判断日志是否为无效日志,若是则将该条日志删除。
[0018]可选地,在根据本发明的系统中,日志分页查询请求包括日志来源、日志生成日期、日志生成时间、页起始行和每页日志条数,查询模块适于根据日志分页查询请求中的日志来源、日志生成日期和日志生成时间确定第二文件的存储路径,读取该存储路径下的第二文件;还适于读取第二文件中该日志生成时间对应的一条日志,并以该条日志作为行号为第I行的日志;还适于根据页起始行和每页日志条数确定该页的页结束行,读取并存储第二文件中第I行日志后行号为该页起始行至页结束行的所有日志为查询结果。
[0019]可选地,在根据本发明的系统中,查询模块还适于查询第二文件的索引,若索引中存在该日志生成时间,则读取第二文件中该日志生成时间对应的一条日志;若索引中不存在该日志生成时间,则查询索引中与该日志生成时间最接近的日志生成时间,读取第二文件中最接近的日志生成时间对应的一条日志。
[0020]可选地,在根据本发明的系统中,查询模块还适于在读取并存储第二文件中第I行日志后行号为该页起始行至页结束行的所有日志为查询结果之前,根据每页日志条数判断该页起始行是否位于第一页。
[0021]可选地,在根据本发明的系统中,查询模块还适于若页起始行位于第一页,则令该页起始行为第I行,将第I行的日志存储至查询结果,并以第二文件中该第I行的日志为起始,重复读取下一条日志、将该条日志存储至查询结果,直至重复次数为每页日志条数减去
1
[0022]可选地,在根据本发明的系统中,查询模块还适于若页起始行不是位于第一页,则以第二文件中第I行的日志为起始,重复读取下一条日志直至重复次数为页起始行减去2;继续重复读取下一条日志、将该条日志存储至查询结果,直至重复次数为每页日志条数。
[0023]可选地,在根据本发明的系统中,查询模块还适于根据页起始行和每页日志条数确定下一页的页起始行,将下一页的页起始行存储至查询结果。
[0024]可选地,在根据本发明的系统中,其中每一条日志为一行,页结束行为页起始行加上每页日志条数后减去I,下一页的页起始行为该页起始行加上每页日志条数。
[0025]可选地,在根据本发明的系统中,第二文件为Mapfile文件。
[0026]根据本发明的日志查询方案,通过对海量的小文件日志进行合并后存储为第二文件,节省了系统资源,同时设置具体的查询条件,并以日志时间为索引查询第二文件,可以实现对第二文件中日志的分页查询,提高了查询效率。
【附图说明】
[0027]为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
[0028]图1示出了根据本发明一个示例性实施例的日志查询系统100的结构框
[0029]图;以及
[0030]图2示出
了根据本发明一个实施例的日志查询方法200的流程图。
【具体实施方式】
[0031]下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0032]图1示出了根据本发明一个示例性实施例的日志查询系统100的结构框图。日志查询系统10可以包括接收模块110、合并模块120、查询模块130和存储模块140。接收模块110适于接收采集的至少一条日志,该日志可以包括日志来源、日志生成日期和日志生成时间,其中日志来源可以是生成该日志的站点的域名,日志生成日期可以是生成该日志的日期,日志生成时间可以是生成该日志的时间。如下例所示的日志,该条日志的日志来源为“www.chel68.com”,日志生成日期为“2015-11-09”,日志生成时间为“10:37:21”:
[0033]“2015-11-09 10:37:21 2015-11-09 10:37:21/handler/CarDetail_v3/GetLinkPhone.ashx?infoId = 6422324&linkType = 2&phone = 200 2088 MISS 0.0130.013 www.chel68.com221.6.152.175 192.168.193.119 192.168.196.2:80http://www.chel68.com/dealer/115207/6422324.html MoziIla/5.0(Windows NT 6.3;W0W64;Trident/7.0;LCJB;rv:11.0)1 ike Geckol21.25.247.88 web cache3 publie,max-age =1800——”。
[0034]而后接收模块110将接收的每一条日志存储为一个第一文件,该第一文件以该条日志的日志来源、日志生成日期和日志生成时间为存储路径,存储于与接收模块110连接的存储模块140。
[0035]具体地,接收模块110先可以查询在存储模块140中是否存在以该日志来源为名的目录,若不存在则创建以日志来源为名的目录,继续查询在该目录下是否存在以该日志生成日期为名的子目录,若不存在该子目录,则在目录下创建以日志生成日期为名的子目录,并在该子目录下以日志生成时间为名存储第一文件;若已存在该子目录,则同样在该子目录下以日志生成时间为名存储第一文件。其中,若在存储模块140中已存在以该日志来源为名的目录,则同样在该目录下继续查询是否存在以该日志生成日期为名的子目录。一条日志来源为“www.chel68.com”、日志生成日期为“2015-11-09”、日志生成时间为“10: 37: 21”的第一文件在存储模块140中的存储路径可以如下:“/work/scs_un/www.chel68.com/20151109/103721.txt”。这样将每条日志存储至对应的路径下,便于后期按不同的路径读取日志,提高了读取效率,方便管理。
[0036]此外,在将接收的每一条日志存储为一个第一文件之前,根据本发明的一个实施方式,接收模块110还适于解析日志内容,判断该日志是否为无效日志,若是则将该条日志删除。有效日志通常包括固定的信息字段,接收模块110可以根据日志内容检测该日志是否存在信息字段的缺失,若存在缺失,则判断该条日志为无效日志,将该条日志删除,避免因存储无效日志导致的存储浪费。
[0037]而由于存储的第一文件通常比较大量,每个文件大小又比较小,一般小于64M,这样大量的小文件在存储时会占用大量的存储空间,造成存储的浪费。为了减小存储的消耗,本发明的日志查询系统100中合并模块120可以通过将大量小文件按照一定规则合并成大文件进行存储,有效节省了存储空间。
[0038]合并模块120与存储模块140相连,适于读取日志来源相同、日志生成日期相同和日志生成时间所属的时间段相同的存储路径下的至少一个第一文件。具体地,按照上述第一文件的存储原理,存储于同一目录且同一子目录下的第一文件存储路径中的日志来源和日志生成日期均相同,合并模块120可以定时读取子目录下的第一文件,确定第一文件中日志生成时间所属的时间段,获取时间段相同的至少一个第一文件。其中可以理解地,全天24时可以划分为24个时间段,分别为O时至I时(包括O时O分O秒)、1时至2时(包括I时O分O秒)……22时至23时(包括22时O分O秒)和23时至O时(包括23时O分O秒)。该时间段以一个取值在O?23的整数值表示,例如时间段O时至I时以数值O表示,时间段I时至2时以数值I表示,依此类推。
[0039]而后合并模块120将上述日志生成时间所属的时间段相同的至少一个第一文件按照其中日志生成时间有序排列后合并为一个第二文件,该第二文件通常可以包括有序的数据和索引,数据为key-value结构,key同时作为索引,通过索引可以快速的定位至相应的数据。例如,第二文件中一条日志为一个value,该条日志的日志生成时间为相应的key,同时也为其索引。
[0040]这样,合并模块120可以以第一文件中日志生成时间为第二文件的索引,以日志来源、日志生成日期和日志生成时间所属的时间段为第二文件的存储路径。
[0041]具体地,合并模块120将这些第一文件按照各自的日志生成时间为顺序进行排列(降序或者升序),将有序排列的第一文件合并为一个第二文件,并按照第一文件中日志生成时间生成第二文件的索引。这里第二文件可以是Mapfile文件。而后,合并模块120将合并成的第二文件在存储模块140中的以日志来源为名的目录下的以日志生成日期为名的子目录下,以日志生成时间所属的时间段为名存储。例如,一个Mapf i Ie格式的第二文件的存储路径可以如下例:“/work/scs_un/www.chel68.com/20151109/12.map”,该路径表不此第二文件中包括了站点www.chel68.com在2015年11月9日的12时至13时(包括12时O分O秒,不包括13时O分O秒)时间段生成的日志。
[0042]可以理解地,存储模块140中存储有大量的第二文件,每个第二文件包括有大量的日志数据,给日志的查询造成了困难。为了提高日志的查询效率,节省查询时间,本发明的查询模块130与存储模块140连接,适于接收用户的日志分页查询请求,获取相应存储路径下的第二文件,对获取的第二文件进行分页查询后将查询结果返回至用户。
[0043]日志分页查询请求包括日志来源、日志生成日期、日志生成时间、页起始行和每页日志条数。显然地,日志以分页的形式展示时,每页日志条数为每一页包括的日志条数,一条日志即为一行,用户需要查询的一页的页起始行为该页页码减去I后乘以每页日志条数、再加上I。例如,若每页日志条数为100,则第一页的页起始行为第I行,第二页的页起始行为第101行。
[0044]首先,查询模块130可以根据该日志分页查询请求中的日志来源、日志生成日期和日志生成时间确定第二文件的存储路径,读取该存储路径下的第二文件。具体地,查询模块130可以确定该日志生成时间所属的时间段,根据日志来源、日志生成日期和该时间段确定第二文件的存储路径。例如,假设日志分页查询请求中的日志来源、日志生成日期和日志生成时间分别为“www.che168.com”、“2015年11月09日”和“12时20分23秒”,日志生成时间“12时20分23秒”所属的时间段为12时至13时这个时间段,该时间段以数值12表示,则可以确定第二文件的存储路径为 “/work/scs_un/www.chel68.com/20151109/12.map”。
[0045]查询模块130获取该存储路径下的第二文件后,适于对该第二文件进行分页查询,查询日志分页查询请求的日志生成时间对应的一条日志,并默认以该条日志为第一页的页起始行,即行号为第I行的日志。具体地,查询模块130可以查询第二文件的索引,若索引中存在日志分页查询请求的日志生成时间,则读取第二文件中该日志生成时间对应的一条日志,以该条日志作为行号为第I行的日志;若索引中不存在该日志生成时间,则查询索引中与该日志生成时间最接近的日志生成时间,读取第二文件中该最接近的日志生成时间对应的一条日志,以该条日志作为行号为第I行的日志。
[0046]确定行号为第I行的日志后,查询模块130适于根据日志分页查询请求中页起始行和每页日志条数确定该页的页结束行,即页起始行加上每页日志条数后减去I。而后,查询模块130读取并存储第二文件中第I行日志后行号为页起始行至页结束行的所有日志为查询结果。
[0047]其中,查询模块130在读取并存储第二文件中第一行日志后行号为该页起始行至页结束行的所有日志为查询结果之前,还可以根据每页日志条数判断日志分页查询请求的页起始行是否位于第一页。
[
0048]当页起始行的行号不大于每页日志条数的数值时,查询模块130确定该页起始行位于第一页,而第一页的页起始行为第I行,因此查询模块130可以令该页起始行为第I行,将该第I行的日志存储至查询结果;而后以第二文件中该第I行的日志为起始,重复读取下一条日志、将该条日志存储至查询结果,直至重复次数为每页日志条数减去I,此时查询结果存储有第一页包括的所有日志。
[0049]当页起始行的行号大于每页日志条数的数值时,查询模块130确定该页起始行不是位于第一页,则需要忽略该页起始行之前的日志,因此查询模块130可以以第二文件中第I行的日志为起始,重复读取下一条日志直至重复次数为页起始行减去2;而后,继续重复读取下一条日志、将该条日志存储至查询结果,直至重复次数为每页日志条数,此时查询结果存储有页起始行位于的一页包括的所有日志。
[0050]获取查询结果后,查询模块130可以将该查询结果返回至用户,便于用户查看。此夕卜,查询模块130还可以根据页起始行和每页日志条数确定下一页的页起始行,并将下一页的页起始行存储至查询结果,以便用户根据查询结果中下一页的页起始行继续请求查询下一页的日志。其中下一页的页起始行为上述页起始行加上每页日志条数。
[0051 ] 下面通过一个以Spark、Spark-streaming和HDFS为架构的日志查询系统为实施例来说明分页查询的实现原理。其中,Spark-s treaming对应于系统中接收模块,Spark对应于系统中合并模块和查询模块,HDFS对应于系统中合并模块。存储模块存储有包括日志数据的Mapf i Ie文件,即第二文件。
[0052]用户输入的日志查询请求中可以包括站点域名host、日期date、时间time和页起始行StartLine(第一页可以不输入页起始行startLine,默认页起始行为第I行),而每页日志条数默认为100条,页结束行endLine为StartLine加上99,返回的查询结果为logs。
[0053]其中,查询模块可以以该时间time作为Mapf iIe文件查询的key,并利用Mapf iIe文件的函数reader.get (time ,value)来获取该key对应的value,即该时间对应的一条日志。获取一条日志后,查询模块可以以该条日志为value,利用Mapf i Ie文件的另一个函数reader.next(key, value)来获取该条日志的下一条日志。同时,查询模块还可以利用函数logs.add(value.toString())将获取的日志依次存储至查询结果logs中。当查询结果logs存储用户查询的页起始行至页结束行包括的所有日志后,查询模块还可以将页起始行startLine加100作为下一页的页起始行返回至用户。这样,可以实现对存储在HDFS的Mapfile文件中的日志明细分页查询。其中,相应处理已在上述对日志查询系统100的描述中详细说明,此处不再赘述。
[0054]图2示出了根据本发明一个实施例的日志查询方法200的流程图。该方法200适于在日志查询系统100中执行,该验证方法200始于步骤S210,在步骤S210中,接收采集的至少一条日志,该日志包括日志来源、日志生成日期和日志生成时间。
[0055]接下来在步骤S220中,将接收的每一条日志存储为一个第一文件,该第一文件以该条日志的日志来源、日志生成日期和日志生成时间为存储路径。
[0056]其中,根据本发明的一个实施方式,在步骤S220之前包括步骤:解析日志的格式,若格式不是预定格式,则将该条日志删除。
[0057]第一文件存储后,在步骤S230中,读取日志来源相同、日志生成日期相同和日志生成时间所属的时间段相同的存储路径下的至少一个第一文件。
[0058]在步骤S240中,将至少一个第一文件按照其中日志生成时间有序排列后合并为一个第二文件,该第二文件以第一文件中日志生成时间为索引,并以该日志来源、日志生成日期和日志生成时间所属的时间段为存储路径。其中该第二文件可以为Mapfile文件。
[0059]而后在步骤S250中,接收用户的日志分页查询请求,获取相应存储路径下的第二文件,对获取的第二文件进行分页查询后将查询结果返回至用户。
[0060]根据本发明的一个实施方式,日志分页查询请求包括日志来源、日志生成日期、日志生成时间、页起始行和每页日志条数,获取相应存储路径下的第二文件,对获取的第二文件进行分页查询后将查询结果返回至用户的步骤可以包括:
[0061 ] 根据日志分页查询请求中的日志来源、日志生成日期和日志生成时间确定第二文件的存储路径,读取该存储路径下的第二文件;读取第二文件中日志生成时间对应的一条日志,并以该条日志作为行号为第I行的日志;根据页起始行和每页日志条数确定该页的页结束行;以及读取并存储第二文件中第I行日志后行号为该页起始行至页结束行的所有曰志为查询结果。
[0062]其中,根据本发明的另一个实施方式,读取第二文件中日志生成时间对应的一条日志的步骤包括:
[0063]查询第二文件的索引,若索引中存在该日志生成时间,则读取第二文件中该日志生成时间对应的一条日志;以及若索引中不存在该日志生成时间,则查询索引中与该日志生成时间最接近的日志生成时间,读取第二文件中该最接近的日志生成时间对应的一条日
V1、1、O
[0064]此外,根据本发明的另一个实施方式,在读取并存储第二文件中第I行日志后行号为该页起始行至页结束行的所有日志为查询结果的步骤之前,还包括步骤:根据每页日志条数判断页起始行是否位于第一页。
[0065]具体地,若页起始行位于第一页,则令页起始行为第I行,读取并存储第二文件中第I行日志后行号为该页起始行至页结束行的所有日志为查询结果的步骤可以包括:将第I行的日志存储至查询结果;以第二文件中该第I行的日志为起始,重复读取下一条日志、将该条日志存储至查询结果,直至重复次数为所述每页日志条数减去I。
[0066]若页起始行不是位于第一页,则读取并存储第二文件中第I行日志后行号为该页起始行至页结束行的所有日志为查询结果的步骤可以包括:以第二文件中第I行的日志为起始,重复读取下一条日志直至重复次数为页起始行减去2;以及继续重复读取下一条日志、将该条日志存储至查询结果,直至重复次数为每页日志条数。其中,每一条日志为一行,页结束行为页起始行加上每页日志条数后减去I。
[0067]根据本发明的还有一个实施方式,方法200还包括步骤:根据页起始行和每页日志条数确定下一页的页起始行,将下一页的页起始行存储至查询结果,其中下一页的页起始行为该页起始行加上每页日志条数。
[0068]以上在结合图1说明日志查询系统100的具体描述中已经对各步骤中的相应处理进行了详细解释,这里不再对重复内容进行赘述。
[0069]在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0070]类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循【具体实施方式】的权利要求书由此明确地并入该【具体实施方式】,其中每个权利要求本身都作为本发明的单独实施例。
[0071]本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
[0072]本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0073]本发明还包括:A6、如A5所述的方法,若所述页起始行位于第一页,则令所述页起始行为第I行,所述读取并存储第二文件中第I行日志后行号为该页起始行至页结束行的所有日志为查询结果的步骤包括:将所述第I行的日志存储至所述查询结果;以所述第二文件中该第I行的日志
为起始,重复读取下一条日志、将该条日志存储至所述查询结果,直至重复次数为所述每页日志条数减去UA7、如A5所述的方法,若所述页起始行不是位于第一页,则所述读取并存储第二文件中第I行日志后行号为该页起始行至页结束行的所有日志为查询结果的步骤包括:以所述第二文件中第I行的日志为起始,重复读取下一条日志直至重复次数为所述页起始行减去2;继续重复读取下一条日志、将该条日志存储至所述查询结果,直至重复次数为所述每页日志条数。AS、如A3-7中任一项所述的方法,还包括:根据所述页起始行和每页日志条数确定下一页的页起始行,将所述下一页的页起始行存储至查询结果。A9、如A3-8中任一项所述的方法,其中每一条日志为一行,所述页结束行为所述页起始行加上每页日志条数后减去1,所述下一页的页起始行为所述页起始行加上所述每页日志条数。A10、如A1-9中任一项所述的方法,所述第二文件为Mapfile文件。
[0074]B16、如B15所述的系统,所述查询模块还适于若所述页起始行位于第一页,则令所述页起始行为第1行,将所述第1行的日志存储至所述查询结果,并以所述第二文件中该第1行的日志为起始,重复读取下一条日志、将该条日志存储至所述查询结果,直至重复次数为所述每页日志条数减去1。則7、如B15所述的系统,所述查询模块还适于若所述页起始行不是位于第一页,则以所述第二文件中第1行的日志为起始,重复读取下一条日志直至重复次数为所述页起始行减去2;继续重复读取下一条日志、将该条日志存储至所述查询结果,直至重复次数为所述每页日志条数。B18、如B13-17所述的系统,所述查询模块还适于根据所述页起始行和每页日志条数确定下一页的页起始行,将所述下一页的页起始行存储至查询结果。B19、如B13-18所述的系统,其中每一条日志为一行,所述页结束行为所述页起始行加上每页日志条数后减去1,所述下一页的页起始行为所述页起始行加上所述每页日志条数。B20、如B11-19所述的系统,所述第二文件为Mapfi le文件。
[0075]此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
[0076]此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
[0077]如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
[0078]尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。
【主权项】
1.一种日志查询方法,该方法包括: 接收采集的至少一条日志,所述日志包括日志来源、日志生成日期和日志生成时间; 将接收的每一条日志存储为一个第一文件,所述第一文件以该条日志的日志来源、日志生成日期和日志生成时间为存储路径; 读取日志来源相同、日志生成日期相同和日志生成时间所属的时间段相同的存储路径下的至少一个第一文件; 将所述至少一个第一文件按照其中日志生成时间有序排列后合并为一个第二文件,所述第二文件以第一文件中日志生成时间为索引,并以所述日志来源、日志生成日期和日志生成时间所属的时间段为存储路径; 接收用户的日志分页查询请求,获取相应存储路径下的第二文件,对获取的第二文件进行分页查询后将查询结果返回至用户。2.如权利要求1所述的方法,在所述将接收的每一条日志存储为一个第一文件的步骤之前,还包括: 解析所述日志内容,判断所述日志是否为无效日志,若是则将该条日志删除。3.如权利要求1或2所述的方法,所述日志分页查询请求包括日志来源、日志生成日期、曰志生成时间、页起始行和每页日志条数,所述获取相应存储路径下的第二文件,对获取的第二文件进行分页查询后将查询结果返回至用户的步骤包括: 根据日志分页查询请求中的日志来源、日志生成日期和日志生成时间确定第二文件的存储路径,读取该存储路径下的第二文件; 读取所述第二文件中所述日志生成时间对应的一条日志,并以该条日志作为行号为第I行的日志; 根据所述页起始行和每页日志条数确定该页的页结束行; 读取并存储所述第二文件中第I行日志后行号为该页起始行至页结束行的所有日志为所述查询结果。4.如权利要求3所述的方法,所述读取第二文件中日志生成时间对应的一条日志的步骤包括: 查询第二文件的索引,若所述索引中存在该日志生成时间,则读取第二文件中该日志生成时间对应的一条日志;以及 若所述索引中不存在该日志生成时间,则查询所述索引中与该日志生成时间最接近的日志生成时间,读取第二文件中所述最接近的日志生成时间对应的一条日志。5.如权利要求3或4所述的方法,在所述读取并存储第二文件中第I行日志后行号为该页起始行至页结束行的所有日志为查询结果的步骤之前,还包括: 根据所述每页日志条数判断所述页起始行是否位于第一页。6.一种日志查询系统,该系统包括: 接收模块,适于接收采集的至少一条日志,所述日志包括日志来源和日志时间;还适于将接收的每一条日志存储为一个第一文件,所述第一文件以该条日志的日志来源、日志生成日期和日志生成时间为存储路径; 合并模块,适于读取日志来源相同、日志生成日期相同和日志生成时间所属的时间段相同的存储路径下的至少一个第一文件;还适于将所述至少一个第一文件按照其中日志生成时间有序排列后合并为一个第二文件,所述第二文件以第一文件中日志生成时间为索引,并以所述日志来源、日志生成日期和日志生成时间所属的时间段为存储路径; 查询模块,适于接收用户的日志分页查询请求,获取相应存储路径下的第二文件,对获取的第二文件进行分页查询后将查询结果返回至用户;以及 存储模块,适于存储第一文件和第二文件。7.如权利要求6所述的系统,所述接收模块还适于在将接收的每一条日志存储为一个第一文件之前,解析所述日志内容,判断所述日志是否为无效日志,若是则将该条日志删除。8.如权利要求6或7所述的系统,所述日志分页查询请求包括日志来源、日志生成日期、日志生成时间、页起始行和每页日志条数,所述查询模块适于根据日志分页查询请求中的日志来源、日志生成日期和日志生成时间确定第二文件的存储路径,读取该存储路径下的第二文件; 还适于读取所述第二文件中所述日志生成时间对应的一条日志,并以该条日志作为行号为第I行的日志; 还适于根据所述页起始行和每页日志条数确定该页的页结束行,读取并存储所述第二文件中第I行日志后行号为该页起始行至页结束行的所有日志为所述查询结果。9.如权利要求8所述的系统,所述查询模块还适于查询第二文件的索引,若所述索引中存在该日志生成时间,则读取第二文件中该日志生成时间对应的一条日志;若所述索引中不存在该日志生成时间,则查询所述索引中与该日志生成时间最接近的日志生成时间,读取第二文件中所述最接近的日志生成时间对应的一条日志。10.如权利要求8或9所述的系统,所述查询模块还适于在读取并存储第二文件中第I行日志后行号为该页起始行至页结束行的所有日志为查询结果之前,根据所述每页日志条数判断所述页起始行是否位于第一页。
【专利摘要】本发明公开了一种日志查询方法,该方法包括:接收采集的至少一条日志,该日志包括日志来源、日志生成日期和日志生成时间;将每一条日志存储为一个第一文件,该第一文件以该条日志的日志来源、日志生成日期和日志生成时间为存储路径;读取日志来源相同、日志生成日期相同和日志生成时间所属的时间段相同的存储路径下的至少一个第一文件;将至少一个第一文件有序排列后合并为一个第二文件,第二文件以日志生成时间为索引,并以日志来源、日志生成日期和日志生成时间所属的时间段为存储路径;接收用户的日志分页查询请求,获取相应存储路径下的第二文件,对该第二文件进行分页查询后将查询结果返回至用户。本发明还公开了一种日志查询系统。
【IPC分类】G06F17/30
【公开号】CN105488201
【申请号】CN201510897423
【发明人】朱峰
【申请人】北京皮尔布莱尼软件有限公司
【公开日】2016年4月13日
【申请日】2015年12月8日