一种动态按时间输出日志文件的方法 【技术领域】
本发明涉及输出日志文件的方法,尤其涉及一种动态按时间输出日志文件的方法。
背景技术
在软件系统中,需要日志功能来记录软件系统运行过程中所发生的事件。目前的一些日志模块有Log4cpp、Log4j、Log4cxx等,这些模块提供了统一的日志输入接口,通过一个或多个日志输出管理器将日志输出到文件、日志服务器,或数据库等位置。这些模块中将日志输出到文件时仅提供了回滚输出日志文件的功能,即设定每个日志文件大小的最大值M和最多可输出的日志文件个数C,按如下规则输出日志文件:
(1)输出的每个日志文件的大小不超过M;
(2)输出的日志文件的个数不大于C;
(3)每个输出的日志文件有一个序列号,序列号按其输出的先后顺序依次递增,序列号从1开始;
(4)当某个文件输出满时(即文件大小将超过M时),若此时文件个数小于C,则输出到一个新的日志文件,并令其序列号加1;
(5)当某个文件输出满时,若此时文件个数为C,则删除序列号为1的文件,并每个令序列号大于1的文件的序列号减1,输出序列号为C的文件。
在输出日志文件时,往往需要控制输出日志文件的时间,例如每隔一小时输出一个日志文件,以便提高通过时间来检索日志文件的效率。回滚输出日志文件是从每个日志文件的大小和日志文件的个数方面进行考虑,其不能满足上述需求。在这种情况下,为了解决上述问题,提出了一种动态按时间输出日志文件的方法,经文件检索发现,目前没有这方面的方法。
【发明内容】
本发明的目的就是为了克服上述现有技术存在的缺陷,提供一种高效可靠的动态按时间输出日志文件的方法。
本发明的目的可以通过以下技术方案来实现:一种动态按时间输出日志文件的方法,其特征在于,该方法包括:
(1)定义文件命名规则,在文件名中设置包含时间信息;
(2)定义时间颗粒度,根据输出日志的大小和输出频率,定义输出日志文件的颗粒度;
(3)定义文件大小阈值,定义文件大小阈值M,每个输出的日志文件大小不能大于该值M;
(4)获得文件名和文件序列号;
(5)输出日志文件,将日志输出到日志文件中。
所述的获得文件名和文件序列号包括:
a.根据日志文件命名规则、时间颗粒度,以及当前时间计算出当前要输出的日志文件的文件名;
b.若当前输出的日志文件大小超过阈值M,则创建新的文件,令其序列号加1。
所述的根据日志文件命名规则、时间颗粒度,以及当前时间计算出当前要输出的日志文件的文件名包括:
小时字符串的计算方法为:
HH=HHC*60+MMCk*k60]]>
分钟字符串的计算方法为:
MM=HHC*60+MMCk*kmod(60)]]>
上述公式中的HHC和MMC分别为当前时间的小时数和分钟数,上述HH、MM定义为取整。
所述的获取得文件序列号的方法包括:
a.令当前文件的序列号为1;
b.检查该文件是否存在;
c.若存在,则判断该文件大小是否大于阈值M;若不存在,则创建此文件;
d.若文件大小小于阈值M,则输出该文件;否则序列号增加1,并返回到b。
与现有技术相比,本发明的优点包括:
(1)采用动态思想,提供了一种动态按时间输出日志文件的方法,从时间的角度描述每个日志文件,不仅提供了一种新的输出日志文件的方法,而且便于按时间快速定位日志,提高日志了检索效率,为软件系统运行过程中的事件分析提供了更快的定位途径;
(2)结合了回滚输出日志文件中对每个文件大小进行限制的思想,有效的防止了文件过大引起输出效率变低的可能,该方法在软件系统的日志功能方面尚数首创。
【附图说明】
图1是本发明一种动态按时间输出日志文件的方法的流程图。
【具体实施方式】
以下结合具体实施例对本发明做进一步说明。
如图1所示:一种动态按时间输出日志文件的方法,该方法包括:
(1)定义文件命名规则,在文件名中设置包含时间信息;
(2)定义时间颗粒度,根据输出日志地大小和输出频率,定义输出日志文件的颗粒度;
(3)定义文件大小阈值,定义文件大小阈值M,每个输出的日志文件大小不能大于该值M;
(4)获得文件名和文件序列号;
A.根据日志文件命名规则、时间颗粒度,以及当前时间计算出当前要输出的日志文件的文件名;
小时字符串的计算方法为:
HH=HHC*60+MMCk*k60]]>
分钟字符串的计算方法为:
MM=HHC*60+MMCk*kmod(60)]]>
上述公式中的HHC和MMC分别为当前时间的小时数和分钟数,上述HH、MM定义为取整;
所述的获取得文件序列号的方法包括:
a.令当前文件的序列号为1;
b.检查该文件是否存在;
c.若存在,则判断该文件大小是否大于阈值M;若不存在,则创建此文件;
d.若文件大小小于阈值M,则输出该文件;否则序列号增加1,并返回到b;
B.若当前输出的日志文件大小超过阈值M,则创建新的文件,令其序列号加1;
(5)输出日志文件,将日志输出到日志文件中。
实施例1
(1)定义文件命名规则。日志文件名中含有时间信息,设其格式为YYYYMMDDHHMM,例如2009年1月1日1时1分的格式为200901010101;文件名中前缀和后缀字符串分别记作PRE和APP;文件名中的序列号记作SEQ。设文件名格式为PRE‖YYYYMMDDHHMMSS‖SEQ‖APP,其中‖为传统的二进制字符串连接符;
(2)定义时间颗粒度。设每隔k分钟创建新的日志文件,其中0<k≤1440,即创建文件的周期不超过一天,若k>1440,对本方法进行扩展即可;
(3)定义文件大小阈值。设日志文件大小阈值为M,其中M>0;
(4)获得文件名。首先,根据当前时间和所定义的时间颗粒度计算出文件名中的时间字符串,具体计算方法如下:
HH=HHC*60+MMCk*k60---(1)]]>
MM=HHC*60+MMCk*kmod(60)---(2)]]>
公式(1)和(2)中的HHC和MMC分别为当前时间的小时和分钟数,其除法这里定义为取整。假设当前时间为13点49分,当时间颗粒度k=5时,HH=13,MM=45;当时间颗粒度k=120时,HH=12,MM=0。
文件名中的序列号计算流程如下:
令当前文件的序列号为1;
检查该文件是否存在;
若存在,则判断该文件大小是否大于阈值M;若不存在,则创建此文件;
若文件大小小于阈值M,则输出该文件,否则序列号增加1,返回到b)。
(5)输出日志文件。将日志输出到日志文件中。