本公开涉及计算机技术领域,具体地,涉及一种日志文件采集方法、装置、可读存储介质及电子设备。
背景技术:
在计算机中,日志文件是记录在操作系统或其他软件运行中发生的事件或在通信软件的不同用户之间的消息的文件,具有处理历史数据、诊断问题的追踪以及理解系统的活动等重要作用。
相关技术中,主要通过建立监听列表对日志文件的内容进行读取,一般来说单个进程最多允许打开的文件句柄数是有限制的,如果产生的日志文件数量特别多,远远多于系统可同时监听的文件数量,可能就会导致传统的日志采集工具在采集的日志文件数目超过几百后,发生程序异常。
技术实现要素:
本公开的目的是提供一种日志文件采集方法、装置、可读存储介质及电子设备,以解决相关技术中存在的由于采集日志文件过多而导致的程序异常的问题。
为了实现上述目的,第一方面,本公开提供一种日志文件采集方法,所述方法包括:
遍历目标文件夹下的所有日志文件;并
基于每一日志文件的创建时间,对所述日志文件进行堆排序,得到文件堆,其中,所述日志文件是创建后内容不会再发生更新的日志文件;
将所述文件堆中的日志文件发送给收集端。
可选地,所述遍历目标文件夹下的所有日志文件,包括:
遍历创建时间在初始创建时间以后的所有日志文件,其中,所述初始创建时间是上一次遍历日志文件并进行堆排序得到的文件堆中日志文件的最晚创建时间;
所述方法还包括:
记录本次堆排序得到的所述文件堆中的日志文件的最晚创建时间,并将该最晚创建时间作为下一次遍历的初始创建时间。
可选地,所述基于每一日志文件的创建时间,对所述日志文件进行堆排序,得到文件堆,包括:
在所述文件堆中的文件数量未达到数量阈值时,每遍历一个日志文件,将该日志文件按照创建时间的先后顺序加入所述文件堆。
可选地,所述基于每一日志文件的创建时间,对所述日志文件进行堆排序,得到文件堆,包括:
在所述文件堆中的文件数量达到数量阈值后,每遍历一个日志文件,比较该日志文件的创建时间与所述文件堆内当前的日志文件的最晚创建时间,若当前遍历的日志文件的创建时间早于所述文件堆内当前的日志文件的最晚创建时间,则将当前遍历的日志文件替换所述文件堆内当前创建时间最晚的日志文件。
可选地,所述将所述文件堆中的日志文件发送给收集端,包括:
向所述收集端发送所述文件堆中创建时间最早的n个日志文件,其中,n是根据所述目标文件夹下当前的日志文件的数量,和/或传输日志文件的通信信道当前的通信质量设定的数量阈值;
所述方法还包括:在将所述n个日志文件发送给所述收集端后,从所述文件堆中删除已发送的所述n个日志文件。
第二方面,本公开还提供一种日志文件采集装置,所述装置包括:
遍历模块,用于遍历目标文件夹下的所有日志文件;
堆排序模块,用于基于每一日志文件的创建时间,对所述日志文件进行堆排序,得到文件堆,其中,所述日志文件是创建后内容不会再发生更新的日志文件;
发送模块,用于将所述文件堆中的日志文件发送给收集端。
可选地,所述遍历模块用于:
遍历创建时间在初始创建时间以后的所有日志文件,其中,所述初始创建时间是上一次遍历日志文件并进行堆排序得到的文件堆中日志文件的最晚创建时间;
所述装置还包括:
记录模块,用于记录本次堆排序得到的所述文件堆中的日志文件的最晚创建时间,并将该最晚创建时间作为下一次遍历的初始创建时间。
可选地,所述堆排序模块用于在所述文件堆中的文件数量未达到数量阈值时,每遍历一个日志文件,将该日志文件按照创建时间的先后顺序加入所述文件堆。
可选地,所述堆排序模块,用于:
在所述文件堆中的文件数量达到数量阈值后,每遍历一个日志文件,比较该日志文件的创建时间与所述文件堆内当前的日志文件的最晚创建时间,若当前遍历的日志文件的创建时间早于所述文件堆内当前的日志文件的最晚创建时间,则将当前遍历的日志文件替换所述文件堆内当前创建时间最晚的日志文件。
可选地,所述发送模块用于:
向所述收集端发送所述文件堆中创建时间最早的n个日志文件,其中,n是根据所述目标文件夹下当前的日志文件的数量,和/或传输日志文件的通信信道当前的通信质量设定的数量阈值;
所述装置还包括:
删除模块,用于在将所述n个日志文件发送给所述收集端后,从所述文件堆中删除已发送的所述n个日志文件。
第三方面,本公开还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面中任一项所述方法的步骤。
第四方面,本公开还提供一种电子设备,包括:
存储器,其上存储有计算机程序;
处理器,用于执行所述存储器中的所述计算机程序,以实现第一方面中任一项所述方法的步骤。
通过上述技术方案,可以遍历目标文件夹下的所有日志文件,并基于每一日志文件的创建时间,对日志文件进行堆排序,得到文件堆,其中,日志文件是创建后内容不会再发生更新的日志文件,然后将文件堆中的日志文件发送给收集端。由于日志文件基于创建时间进行了堆排序,因此通过本公开的日志文件采集方法可以保证日志文件的时间有序性,同时,由于堆中可以保存大量的数据,因此通过本公开的日志文件采集方法可以采集大量的日志文件,解决相关技术中存在的由于采集日志文件过多而导致的程序异常的问题,保证日志采集的稳定性,提高日志采集的效率。
本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1是根据本公开示例性实施例示出的一种日志文件采集方法的一流程图;
图2是根据本公开示例性实施例示出的一种日志文件采集方法的另一流程图;
图3是根据本公开示例性实施例示出的一种日志文件采集装置的框图;
图4是根据本公开示例性实施例示出的一种日志文件采集装置的应用场景示意图;
图5是根据本公开示例性实施例示出的一种电子设备的框图。
具体实施方式
以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。
首先说明本公开实施例的应用场景。
本公开实施例可以应用于产生大量日志文件,且每个日志文件只会被写入一次的场景下,比如,摄像头拍摄车辆车牌号的场景,当摄像头拍下一个车牌号后,这条车牌号就被记录下来,后续不会对该车牌号进行更新,也就是说,在这种场景下,每个日志文件是创建后不会再发生更新的日志文件,并且这些日志文件的数量非常多,远远多于系统可以同时监听的文件数量,同时,这些日志文件是实时产生的,在进行日志采集时需要保证日志的时间有序性。
由于在这种场景下,文件数量特别多,如果采用相关技术中的维持监听列表的方式对日志文件进行采集,可能会由于采集的日志文件过多而导致程序发生异常,因此,本公开实施例中提出一种日志文件采集方法,通过堆实现对大量日志文件的采集,以解决相关技术中存在的由于采集的日志文件过多而导致程序发生异常的问题。
图1是根据本公开一示例性实施例示出的一种日志文件采集方法的流程图,参照图1,该日志文件采集方法包括以下步骤:
步骤s101,遍历目标文件夹下的所有日志文件;
步骤s102,基于每一日志文件的创建时间,对日志文件进行堆排序,得到文件堆,其中,日志文件是创建后内容不会再发生更新的日志文件;
步骤s103,将文件堆中的日志文件发送给收集端。
本公开实施例中,通过堆进行日志文件的采集,可以保证日志文件的时间有序性,同时,由于堆中可以保存大量的数据,因此通过本公开实施例的日志文件采集方法可以采集大量的日志文件,解决相关技术中存在的由于采集日志文件过多而导致的程序异常的问题,保证日志采集的稳定性,提高日志采集的效率。
在步骤s101之前,需要设置日志文件所在的文件目录,比如,需要采集服务器某个应用程序产生的日志文件,那么在进行步骤s101之前需要设置该应用程序产生的日志文件所在的文件目录,这样在步骤s101中就可以根据该文件目录找到目标文件夹,然后遍历该目标文件夹下的所有日志文件。
可选地,在步骤s101中,遍历目标文件夹下的所有日志文件可以是遍历创建时间在初始创建时间以后的所有日志文件,其中,初始创建时间是上一次遍历日志文件并进行堆排序得到的文件堆中日志文件的最晚创建时间,相应地,本实施例中的日志文件采集的方法还可以记录本次堆排序得到的文件堆中的日志文件的最晚创建时间,并将该最晚创建时间作为下一次遍历的初始创建时间。
例如,第一次遍历时确定的最晚创建时间为11点8分8秒,那么进行第二次遍历时就遍历创建时间在11点8分8秒之后的所有日志文件,然后记录本次堆排序得到的文件堆中的日志文件的最晚创建时间,比如为11点10分32秒,那么就将11点10分32秒作第三次遍历的初始创建时间,以此类推。
应当理解的是,在第一遍历时,由于没有上一次遍历过程,因此,可以将第一遍历的初始创建时间设置为0,那么第一遍历就遍历创建时间在0之后的所有日志文件。
通过以上的方式,将上一次遍历日志文件并进行堆排序得到的文件堆中日志文件的最晚创建时间作为本次遍历的初始创建时间,能够使每次采集到的日志文件都是创建时间较早的日志文件,保证日志采集的时间有序性,并且,由于堆中可以保存大量的日志文件,因此还解决了由于采集日志文件过多而导致的程序异常的问题。
可选地,在步骤s102中可以是在文件堆中的文件数量未达到数量阈值时,每遍历一个日志文件,将该日志文件按照创建时间的先后顺序加入所述文件堆。
数量阈值可以是用户根据需要采集的日志文件数量自行设定的,其表征了文件堆中最多能保存的文件数量,比如,用户可以将数量阈值设置为500,即表明文件堆中最多可以保存500个文件,又或者,用户可以将数量阈值设置为1000,则表明文件堆中最多可以保存1000个文件,等等,本公开实施例对于数量阈值的具体设定方式不作限定。
通过以上的方式,在文件堆中的文件数量未达到数量阈值时,该日志文件按照创建时间的先后顺序加入所述文件堆,可以保证采集的日志文件的时间有序性,并且,由于堆中可以保存大量的日志文件,因此还解决了由于采集日志文件过多而导致的程序异常的问题。
可选地,在步骤s102中还可以是在所述文件堆中的文件数量达到数量阈值后,每遍历一个日志文件,比较该日志文件的创建时间与所述文件堆内当前的日志文件的最晚创建时间,若当前遍历的日志文件的创建时间早于所述文件堆内当前的日志文件的最晚创建时间,则将当前遍历的日志文件替换所述文件堆内当前创建时间最晚的日志文件。
当文件堆中的文件数量达到数量阈值,但目标文件夹下的日志文件还没有遍历完,那么为了保证文件堆中的日志文件的创建时间均早于未放入文件堆中的日志文件,需要每遍历一个日志文件就比较该日志文件的创建时间与所述文件堆内当前的日志文件的最晚创建时间,如果当前遍历的日志文件的创建时间早于文件堆内当前的日志文件的最晚创建时间,则将当前遍历的日志文件替换文件堆内当前创建时间最晚的日志文件,也就是说,将当前创建时间最晚的日志文件从文件堆中取出来,然后将当前遍历的日志文件按照创建时间的先后顺序加入文件堆中。
例如,数量阈值为500,文件堆中的文件数量也为500,但此时还没有将目标文件夹下的所有日志文件遍历完,那么首先确定文件堆中创建时间最晚的日志文件a,然后每遍历一个日志文件b,就将日志文件b的创建时间与日志文件a的创建时间作比较,如果日志文件b的创建时间早于日志文件a,那么就将日志文件a从文件堆中取出,然后将日志文件b按照创建时间的先后顺序加入文件堆中。
应当理解的是,如果当前遍历的日志文件的创建时间等于文件堆内当前的日志文件的最晚创建时间,则直接将当前遍历的日志文件按照创建时间的先后顺序加入文件堆中,使得下一次采集的日志文件的创建时间均晚于本次遍历日志文件并进行堆排序得到的文件堆中日志文件的最晚创建时间,从而保证日志采集的时间有序性。
另外,如果当前遍历的日志文件的创建时间晚于文件堆内当前的日志文件的最晚创建时间,则继续遍历下一日志文件,直到遍历完目标文件夹下的所有日志文件。
通过以上的方式,能够使得下一次采集的日志文件的创建时间均晚于本次遍历日志文件并进行堆排序得到的文件堆中日志文件的最晚创建时间,从而保证日志采集的时间有序性,并且,由于堆中可以保存大量的日志文件,因此还解决了由于采集日志文件过多而导致的程序异常的问题。
可选地,在步骤s103中可以是向收集端发送文件堆中创建时间最早的n个日志文件,其中,n是根据目标文件夹下当前的日志文件的数量,和/或传输日志文件的通信信道当前的通信质量设定的数量阈值,相应地,本公开实施例中的日志文件采集的方法还可以在将n个日志文件发送给收集端后,从文件堆中删除已的所述n个日志文件。
在步骤s103中,收集端可以是用于存储数据的数据库,等等,本公开对此不作限定。但是,需要说明的是,在进行本公开实施例的日志文件采集的方法之前,需要设定收集端的通信地址,比如,收集端为某个云端数据库,那么需要设定该云端数据库的ip地址和端口号,等等,这样的话,就可以根据收集端的地址,将文件堆中的日志文件发送到收集端。
n可以是一个固定不变的数值,也可以是一个动态变化的数值,比如,n可以是根据目标文件夹下当前的日志文件的数量动态变化的,也可以是根据传输日志文件的通信信道当前的通信质量动态变化的,还可以根据目标文件夹下当前的日志文件的数量和传输日志文件的通信信道当前的通信质量动态变化,等等,本公开对此不作限定。
例如,用户可以根据目标文件夹下当前的日志文件的数量确定n为400,那么就将文件堆中创建时间最早的400个日志文件发送给收集端。但是,在下一次日志采集的过程中,由于目标文件夹下当前的日志文件的数量增多,那么用户可以将n确定得更大,比如,将n确定为405,等等,本公开实施例对此不作限定。
在将n个日志文件发送到收集端后,还需要删除文件堆中的这n个日志文件,即清空文件堆中这个n个日志文件对应的n个节点,确保下次发送的日志文件不会包括这n个日志文件,便于下次日志采集过程的进行。
下面以一个完整的实施例说明本公开实施例中的日志文件采集的方法。
参照图2,本公开实施例中的一种日志文件采集方法包括以下步骤:
步骤s201,初始化设置。
初始化设置包括设定待采集的日志文件的文件目录,即设定目标文件夹的文件目录,还包括设定文件堆的大小、数量阈值的大小、采集端的通信地址、调度时间间隔,等等,其中,调度时间间隔为每次日志采集的时间间隔。
步骤s202,遍历目标文件夹下创建时间在初始创建时间以后的所有日志文件。
如果是第一次日志采集过程,则将初始创建时间确定为0,如果不是第一次日志采集过程,则将上一次遍历日志文件并进行堆排序得到的文件堆中日志文件的最晚创建时间作为初始创建时间。
步骤s203,确定文件堆中的文件数量是否达到数量阈值,如果文件堆中的文件数量未达到数量阈值,则进入步骤s204,否则进入步骤s205。
步骤s204,每遍历一个日志文件,将该日志文件按照创建时间的先后顺序加入文件堆。
步骤s205,每遍历一个日志文件,确定当前遍历的日志文件的创建时间是否早于文件堆内当前的日志文件的最晚创建时间,如果是,则进入步骤s206,否则进入步骤s207。
步骤s206,将当前遍历的日志文件替换文件堆内当前创建时间最晚的日志文件。
步骤s207,确定当前遍历的日志文件的创建时间是否等于文件堆内当前的日志文件的最晚创建时间,如果是,则进入步骤s208,否则,进入步骤s205。
步骤s208,将当前遍历的日志文件按照创建时间的先后顺序加入文件堆中。
步骤s209,向收集端发送文件堆中创建时间最早的n个日志文件。
步骤s210,记录本次堆排序得到的所述文件堆中的日志文件的最晚创建时间。
步骤s211,从文件堆中删除已发送的n个日志文件。
通过上述的日志文件采集方法,可以一次性采集大量的日志文件,解决相关技术中存在的由于采集日志文件过多而导致的程序异常的问题,并且,由于日志文件基于创建时间进行了堆排序,因此通过上述日志文件采集方法可以保证日志文件的时间有序性。
参照图3,基于同一发明构思,本公开实施例还提供一种日志文件采集装置300,该装置300包括:
遍历模块301,用于遍历目标文件夹下的所有日志文件;
堆排序模块302,用于基于每一日志文件的创建时间,对日志文件进行堆排序,得到文件堆,其中,日志文件是创建后内容不会再发生更新的日志文件;
发送模块303,用于将文件堆中的日志文件发送给收集端。
可选地,遍历模块301用于:
遍历创建时间在初始创建时间以后的所有日志文件,其中,初始创建时间是上一次遍历日志文件并进行堆排序得到的文件堆中日志文件的最晚创建时间;
装置300还包括:
记录模块,用于记录本次堆排序得到的文件堆中的日志文件的最晚创建时间,并将该最晚创建时间作为下一次遍历的初始创建时间。
可选地,堆排序模块302用于在文件堆中的文件数量未达到数量阈值时,每遍历一个日志文件,将该日志文件按照创建时间的先后顺序加入文件堆。
可选地,堆排序模块302用于:
在文件堆中的文件数量达到数量阈值后,每遍历一个日志文件,比较该日志文件的创建时间与文件堆内当前的日志文件的最晚创建时间,若当前遍历的日志文件的创建时间早于文件堆内当前的日志文件的最晚创建时间,则将当前遍历的日志文件替换文件堆内当前创建时间最晚的日志文件。
可选地,发送模块303用于:
向收集端发送文件堆中创建时间最早的n个日志文件,其中,n是根据目标文件夹下当前的日志文件的数量,和/或传输日志文件的通信信道当前的通信质量设定的数量阈值;
装置300还包括:
删除模块,用于在将n个日志文件发送给收集端后,从文件堆中删除已发送的n个日志文件。
需要说明的是,关于上述实施例中的任一日志文件采集装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
通过上述任一日志文件采集装置,可以一次性采集大量的日志文件,解决相关技术中存在的由于采集日志文件过多而导致的程序异常的问题,并且,由于日志文件基于创建时间进行了堆排序,因此通过上述任一日志文件采集装置可以保证日志文件的时间有序性。
参照图4,下面说明上述任一日志文件采集装置的应用场景。服务器401的应用程序实时产生大量日志文件,日志文件采集装置402实时采集这些日志文件,然后日志文件采集装置402将采集到的日志文件发送到目标数据库403(收集端)。
图5是根据一示例性实施例示出的一种电子设备500的框图。如图5所示,该电子设备500可以包括:处理器501,存储器502。该电子设备500还可以包括多媒体组件503,输入/输出(i/o)接口504,以及通信组件505中的一者或多者。
其中,处理器501用于控制该电子设备500的整体操作,以完成上述的日志文件采集方法中的全部或部分步骤。存储器502用于存储各种类型的数据以支持在该电子设备500的操作,这些数据例如可以包括用于在该电子设备500上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器502可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(staticrandomaccessmemory,简称sram),电可擦除可编程只读存储器(electricallyerasableprogrammableread-onlymemory,简称eeprom),可擦除可编程只读存储器(erasableprogrammableread-onlymemory,简称eprom),可编程只读存储器(programmableread-onlymemory,简称prom),只读存储器(read-onlymemory,简称rom),磁存储器,快闪存储器,磁盘或光盘。多媒体组件503可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器502或通过通信组件505发送。音频组件还包括至少一个扬声器,用于输出音频信号。i/o接口504为处理器501和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件505用于该电子设备500与其他设备之间进行有线或无线通信。无线通信,例如wi-fi,蓝牙,近场通信(nearfieldcommunication,简称nfc),2g、3g或4g,或它们中的一种或几种的组合,因此相应的该通信组件505可以包括:wi-fi模块,蓝牙模块,nfc模块。
在一示例性实施例中,电子设备500可以被一个或多个应用专用集成电路(applicationspecificintegratedcircuit,简称asic)、数字信号处理器(digitalsignalprocessor,简称dsp)、数字信号处理设备(digitalsignalprocessingdevice,简称dspd)、可编程逻辑器件(programmablelogicdevice,简称pld)、现场可编程门阵列(fieldprogrammablegatearray,简称fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的日志文件采集方法。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的日志文件采集的方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器502,上述程序指令可由电子设备500的处理器501执行以完成上述的日志文件采集方法。
以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。
此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。