具体实施方式
下面将结合附图及较佳实施例对本发明的技术方案进行详细描述。
在其中一个实施例中,参见图1所示,一种日志压缩方法,该方法包括以下步骤:
S100获取包含日志记录的文件。
S200根据日志记录输出优先级遍历所述文件,分别以唯一的编号替代所述文件中每一所述日志记录的字符串,得到已替代日志记录。
在本发明中,日志记录输出是指开发人员在源代码中插入需要输出系统中某些变量或过程状态的信息,例如
…source code…
LOG_DEBUG(MOD_AA,macId,"ueNum[%d],throughOutput[%u]MB.stateis ideal!\n",ueNUm,totalthp);
…source code…
在步骤S200中,根据日志记录输出优先级遍历所有包含日志记录的文件,按照日志记录输出优先级顺序分别以唯一的编号替代文件中每一所述日志记录的字符串,得到已替代的日志记录,例如,以系统业务日志为例,业务日志输出的格式为“时间+表示日志记录中信息含义的字符串+动态变量的值”,假设字符串替代前的日志记录为:
a:[2000-01-01 00:06:53:752]:ueNum[32],total throught[20]MB,state is ideal。
其中“a”表示日志记录编号,“[2000-01-01 00:06:53:752]”表示日志记录的时间信息,“32”和“20”均表示动态变量的实时输出值,将上述日志记录中表示日志记录的字符串用唯一的编号进行替代,这里,在其中一种可选的实施方式中,以数值型编号替代日志记录中的字符串,并且根据日志记录的总条数确定数值型编号所占的字节数,优选地,数值型编号所占的字节数小于或者等于4个字节,以满足压缩时日志记录的总条数需求的同时,保证每条日志记录的压缩效果。用唯一的编号替代上述日志记录中表示日志记录的对应的字符串后,得到的已替代日志记录为:
a@[2000-01-01 00:06:53:752]:10,32,20
即利用数值型编号“10”替代表示日志记录的字符串“ueNum[],totalthrought[]MB,state is ideal。”显然地,数值型编号“10”所占的字节数远小于替代前表示日志记录的字符串的字节数,因此对表示日志记录的字符串进行替代能够显著地提高日志记录的压缩比。在上述的例子中,仅以数值型编号为例对如何以唯一的编号替代表示日志记录的对应的字符串进行了说明,实际上,以唯一的编号对相应的字符串进行替代,其目的主要是通过所占字节数较少的编号替代所占字节数较多的字符串以减少日志记录整体所占的字节数,并在恢复日志记录内容时,根据压缩时唯一的编号可以对压缩的日志记录进行解压恢复,因此在对表示日志记录的字符串进行替代以提高日志记录压缩比的过程中,用于替代字符串的编号只要能够满足缩短字符串所占字节并能用于恢复日志记录即可,用于替代字符串的编号并不局限于数值型编号,其他编号如字母型编号、数字与字母相结合的编号或者其他类型的编号等也完全适用于本发明中对字符串的替代。当用于替代表示日志记录的字符串的编号为数值型编号时,在其中一个具体的实施方式中,可以根据字符串的输出频率的大小顺序确定字符串对应的数值型编号的取值,当字符串的输出频率越大时,数值型编号的取值越小,即本实施方式可以按照字符串的输出频率从大至小的顺序确定对应的数值型编号从小至大的取值,即对于输出频率较大的字符串,利用取值较小的数值型编号予以替代,由于取值较小的数值型编号所占的字节数相应较小,而且数值型编号较小的日志记录在日志解压恢复的过程中所需遍历的次数少,因此按照字符串的输出频率从大至小的顺序确定对应的数值型编号从小至大的取值不仅有利于提高日志记录的压缩效果,而且同时有利于提高日志解压恢复的速度。
由于本实施例的日志压缩方法是根据日志记录输出优先级遍历所有包含日志记录的文件并分别以唯一的编号对文件中每一所述日志记录的字符串进行替代的,因此在解压恢复原日志记录时,根据日志记录输出优先级进行解压恢复即可,减小了遍历所有文件中的日志记录的次数,有利于提高解压恢复日志记录的速度和效率。其中,对于日志记录输出优先级的设定可以有多种方法,例如根据日志记录输出的频繁度或者重要程度等设定日志记录输出的优先级等,这里作为其中一种具体的实施方式,根据日志记录的信息重要等级设定步骤S200中的日志记录输出优先级,当日志记录的信息重要等级越高时,日志记录对应的日志记录输出优先级越高。系统的日志记录能够反映出系统发生的事件的信息,由于发生的事件的重要程度不同,因此记录时间的日记记录所对应的信息重要程度也不尽相同,本实施方式以日志记录的信息重要等级为依据,对日志记录的输出优先级进行排序,日志记录的信息重要等级越高,相应的日志记录输出优先级越高,从而实现对重要的日志记录的优先压缩输出,提高了日志压缩的可靠性和有效性。
S300对已替代日志记录进行共时段日志共时间戳编码处理,得到压缩后的日志。
步骤S200完成对每一所述日志记录的字符串的编号替代,得到已替代日志记录后,步骤S300将对已替代日志记录进行共时段日志共时间戳编码处理,具体地,对于属于同一时间段的共时间戳的日志记录,进行时间戳编码处理,可以有效降低压缩日志记录时的时间戳开销,降低日志记录的时间戳信息在日志内容中的比重,从而进一步提高了日志压缩比和压缩效率。具体地,在共时段日志共时间戳编码处理的一种实现方式中,判断当前已替代日志记录的时间信息是否与相邻上一条已替代日志记录的时间信息相同,若是,则采用预设特殊字符替代当前已替代日志记录的时间信息来进行编码,亦即对于若干个共时段日志共时间戳的日志记录而言,只保留第一条日志记录的时间信息,与该第一条日志记录属于共时段日志共时间戳的其他日志记录的时间信息则采用某一字符进行替代,进而实现对已替代日志记录的共时段日志共时间戳编码,对于逐条对已替代日志记录进行共时段日志共时间戳编码处理的情况而言,需对待编码的当前已替代日志记录的时间信息进行判断,如果当前已替代日志记录的时间信息与其相邻的上一已替代日志记录的时间信息相同,那么就采用某一字符替代当前已替代日志记录的时间信息来进行共时段日志共时间戳编码。例如,假设字符串替代之后、共时段日志共时间戳编码处理之前的已替代日志记录为:
m@[2000-01-01 00:10:41:584]:460,93,0,0,3
n@[2000-01-01 00:10:41:584]:461,93,104,5,58
o@[2000-01-01 00:10:41:584]:460,bd,0,0,5
p@[2000-01-01 00:10:41:584]:461,bd,64,5,54
q@[2000-01-01 00:10:41:584]:460,69,0,5,94
r@[2000-01-01 00:10:41:584]:461,69,76,4,71
s@[2000-01-01 00:10:41:584]:460,7d,0,9,158
t@[2000-01-01 00:10:41:584]:461,7d,56,1,32
u@[2000-01-01 00:10:41:696]:721,12,b1,2
v@[2000-01-01 00:10:41:728]:721,12,9d,2
在上述已替代日志记录中,日志记录编号为m~t的日志记录属于共时段日志共时间戳日志记录,时间戳均为[2000-01-01 00:10:41:584],因此对上述已替代日志记录进行共时段日志共时间戳编码处理后,将日志记录编号为m的已替代日志记录的时间信息保留,日志记录编号为n~t的已替代日志记录的时间信息则采用某一字符进行替代,替代后即得到共时段日志共时间戳编码处理后的、压缩后的日志记录,如下所示:
m@[2000-01-01 00:10:41:584]:460,93,0,0,3
n#:461,93,104,5,58
o#:460,bd,0,0,5
p#:461,bd,64,5,54
q#:460,69,0,5,94
r#:461,69,76,4,71
s#:460,7d,0,9,158
t#:461,7d,56,1,32
u@[2000-01-01 00:10:41:696]:721,12,b1,2
v@[2000-01-01 00:10:41:728]:721,12,9d,2
在上述压缩后的日志记录中,每一条日志记录的首字母代表对应的日志记录编号,日志记录编号后的特殊字符代表区分时间戳是否更新,第一个冒号之后的数值代表对表示日志记录的字符串进行替代的唯一的编号,编号后面的数值代表动态变量的实时输出值,因此在共时段日志共时间戳编码处理后,日志记录编号为u和v的日志记录由于其时间信息发生改变,即与相邻的上一条已替代日志记录的时间信息不相同,因此记录编号为u和v的日志记录的时间信息被保留下来,而日志记录编号为n~t的日志记录的时间信息则以符号“#”替代原来的“[2000-01-01 00:10:41:584]”,使得时间信息所占的字节数由原来的24个字节变为替代后的1个字节,显著地降低了时间信息相同的日志记录的时间戳开销,有效降低了日志记录的时间戳信息在日志内容中的比重,从而进一步提高了日志压缩比和压缩效率。
本实施例所提出的日志压缩方法利用日志记录输出优先级遍历所有包含日志记录的文件,分别以唯一的编号替代文件中每一所述日志记录的字符串,从而缩短日志记录中字符串的长度,减少了字符串所占的字节数,提升了日志的压缩比,同时对字符串替代后的日志记录即已替代日志记录进行共时段日志共时间戳编码处理,即对于共时间段的日志记录,只保留第一条日志记录的时间信息,其他共时间段共时间戳的日志记录的时间信息均采用某一字符替代,因此共时段日志共时间戳编码处理有效降低了时间信息相同的日志记录的时间戳开销,降低了日志记录的时间戳信息在日志内容中的比重,从而进一步提高了日志压缩比和压缩效率。
作为一种具体的实施方式,得到已替代日志记录步骤之后、对已替代日志记录进行共时段日志共时间戳编码处理步骤之前还包括以下步骤:将被编号替代的字符串保存至用于恢复原日志记录的映射文件中。在本实施方式中,根据日志记录输出优先级遍历所有包含日志记录的文件,分别以唯一的编号替代每一文件中日志记录的字符串,得到已替代日志记录后,同时将被编号替代的字符串保存至映射文件中,该映射文件将用于对压缩后的日志进行解码恢复,即将被编码替代掉的字符串另外单独保存到某一文本文件中,在后续对压缩后的日志进行解码恢复时,可以利用该文本文件来准确地恢复原日志记录。本实施方式通过将被编号替代的字符串存储至映射文件中,在提高日志压缩比的基础之上,在对压缩后的日志进行解压恢复时,同时可以利用该映射文件实现对压缩后的日志的准确解压恢复,从而提高日志解压恢复的准确性和可靠性。
在本发明中,表示日志记录的字符串包括日志记录中的静态字符串和变量输出的格式指示,具体地,在根据日志记录输出优先级遍历所有包含日志记录的文件后,将每一文件中表示日志记录的字符串用唯一的编号替代时,用唯一的编号替代每一文件中表示日志记录的静态字符串和变量输出的格式指示,以提高利用编号替代表示日志记录的字符串的效率。例如,假设原始日志记录为:
LOG_DEBUG(MOD_AA,macId,"ueNum[%d],throughOutput[%u]MB.stateis ideal!\n",ueNUm,totalthp);
将表示日志记录的字符串用唯一的编号替代(如利用数值型编号“11”进行替代)后,得到已替代日志记录:
LOG_DEBUG(MOD_AA,macId,11,%d,%u,ueNUm,totalthp);
在原始日志记录中,"ueNum[%d],throughOutput[%u]MB.state is ideal!\n"为静态字符串,这里用数值型编号“11”替代该静态字符串,其中%d及%u均代表变量输出的格式指示。
在另一个实施例中,参见图2所示,本发明提出一种日志压缩装置,该装置包括:
获取模块100,用于获取包含日志记录的文件;
替代模块200,用于根据日志记录输出优先级遍历所述文件,分别以唯一的编号替代所述文件中每一所述日志记录的字符串,得到已替代日志记录;
编码模块300,用于对所述已替代日志记录进行共时段日志共时间戳编码处理,得到压缩后的日志。
具体地,在本实施例中,替代模块200根据日志记录输出优先级遍历所有包含日志记录的文件,按照日志记录输出优先级顺序分别以唯一的编号替代文件中每一所述日志记录的字符串,得到已替代的日志记录,例如,以系统业务日志为例,业务日志输出的格式为“时间+表示日志记录中信息含义的字符串+动态变量的值”,假设字符串替代前的日志记录为:
a:[2000-01-01 00:06:53:752]:ueNum[32],total throught[20]MB,state is ideal。
其中“a”表示日志记录编号,“[2000-01-01 00:06:53:752]”表示日志记录的时间信息,“32”和“20”均表示动态变量的实时输出值,替代模块200将上述日志记录中表示日志记录的字符串用唯一的编号进行替代,这里,在其中一种可选的实施方式中,替代模块200以数值型编号替代日志记录中的字符串,并且根据日志记录的总条数确定数值型编号所占的字节数,优选地,数值型编号所占的字节数小于或者等于4个字节,以满足压缩时日志记录的总条数需求的同时,保证每条日志记录的压缩效果。替代模块200用唯一的编号替代上述日志记录中表示日志记录的对应的字符串后,得到的已替代日志记录为:
a@[2000-01-01 00:06:53:752]:10,32,20
即替代模块200利用数值型编号“10”替代表示日志记录的字符串“ueNum[],total throught[]MB,state is ideal。”显然地,数值型编号“10”所占的字节数远小于替代前表示日志记录的字符串的字节数,因此替代模块200对表示日志记录的字符串进行替代能够显著地提高日志记录的压缩比。在上述的例子中,仅以数值型编号为例对替代模块200如何以唯一的编号替代表示日志记录的对应的字符串进行了说明,实际上,替代模块200以唯一的编号对表示日志记录的对应的字符串进行替代,其目的主要是通过所占字节数较少的编号替代所占字节数较多的字符串以减少日志记录整体所占的字节数,并在恢复日志记录内容时,根据压缩时唯一的编号可以对压缩的日志记录进行解压恢复,因此在替代模块200对表示日志记录的字符串进行替代以提高日志记录压缩比的过程中,用于替代字符串的编号只要能够满足缩短字符串所占字节并能用于恢复日志记录即可,用于替代字符串的编号并不局限于数值型编号,其他编号如字母型编号、数字与字母相结合的编号或者其他类型的编号等也完全适用于本发明中字符串的替代。当用于替代表示日志记录的字符串的编号为数值型编号时,在其中一个具体的实施方式中,替代模块200可以根据字符串的输出频率的大小顺序确定字符串对应的数值型编号的取值,当字符串的输出频率越大时,数值型编号的取值越小,即本实施方式中的替代模块200可以按照字符串的输出频率从大至小的顺序确定对应的数值型编号从小至大的取值,即对于输出频率较大的字符串,替代模块200利用取值较小的数值型编号予以替代,由于取值较小的数值型编号所占的字节数相应较小,而且数值型编号较小的日志记录在日志解压恢复的过程中所需遍历的次数少,因此按照字符串的输出频率从大至小的顺序确定对应的数值型编号从小至大的取值不仅有利于提高日志记录的压缩效果,而且同时有利于提高日志解压恢复的速度。
替代模块200完成对每一所述日志记录的字符串的编号替代,得到已替代日志记录后,编码模块300将对已替代日志记录进行共时段日志共时间戳编码处理,具体地,编码模块300对于属于同一时间段的共时间戳的日志记录,进行时间戳编码处理,可以有效降低压缩日志记录时的时间戳开销,降低日志记录的时间戳信息在日志内容中的比重,从而进一步提高了日志压缩比和压缩效率。具体地,在编码模块300的一种实现方式中,编码模块300判断当前已替代日志记录的时间信息是否与相邻上一条已替代日志记录的时间信息相同,若是,则编码模块300采用预设特殊字符替代当前已替代日志记录的时间信息来进行编码,亦即对于若干个共时段日志共时间戳的日志记录而言,编码模块300只保留第一条日志记录的时间信息,与该第一条日志记录属于共时段日志共时间戳的其他日志记录的时间信息编码模块300则采用某一字符进行替代,进而实现对已替代日志记录的共时段日志共时间戳编码,对于编码模块300逐条对已替代日志记录进行共时段日志共时间戳编码处理的情况而言,编码模块300需对待编码的当前已替代日志记录的时间信息进行判断,如果当前已替代日志记录的时间信息与其相邻的上一已替代日志记录的时间信息相同,那么编码模块300就采用某一字符替代当前已替代日志记录的时间信息来进行共时段日志共时间戳编码。例如,假设字符串替代之后、共时段日志共时间戳编码处理之前的已替代日志记录为:
m@[2000-01-01 00:10:41:584]:460,93,0,0,3
n@[2000-01-01 00:10:41:584]:461,93,104,5,58
o@[2000-01-01 00:10:41:584]:460,bd,0,0,5
p@[2000-01-01 00:10:41:584]:461,bd,64,5,54
q@[2000-01-0100:10:41:584]:460,69,0,5,94
r@[2000-01-01 00:10:41:584]:461,69,76,4,71
s@[2000-01-01 00:10:41:584]:460,7d,0,9,158
t@[2000-01-01 00:10:41:584]:461,7d,56,1,32
u@[2000-01-01 00:10:41:696]:721,12,b1,2
v@[2000-01-01 00:10:41:728]:721,12,9d,2
在上述已替代日志记录中,日志记录编号为m~t的日志记录属于共时段日志共时间戳日志记录,时间戳均为[2000-01-01 00:10:41:584],因此编码模块300对上述已替代日志记录进行共时段日志共时间戳编码处理后,将日志记录编号为m的已替代日志记录的时间信息保留,日志记录编号为n~t的已替代日志记录的时间信息则采用某一字符进行替代,替代后即得到共时段日志共时间戳编码处理后的、压缩后的日志记录,如下所示:
m@[2000-01-01 00:10:41:584]:460,93,0,0,3
n#:461,93,104,5,58
o#:460,bd,0,0,5
p#:461,bd,64,5,54
q#:460,69,0,5,94
r#:461,69,76,4,71
s#:460,7d,0,9,158
t#:461,7d,56,1,32
u@[2000-01-01 00:10:41:696]:721,12,b1,2
v@[2000-01-01 00:10:41:728]:721,12,9d,2
在上述压缩后的日志记录中,每一条日志记录的首字母代表对应的日志记录编号,日志记录编号后的特殊字符代表区分时间戳是否更新,第一个冒号之后的数值代表对表示日志记录的字符串进行替代的唯一的编号,编号后面的数值代表动态变量的实时输出值,因此在编码模块300进行共时段日志共时间戳编码处理后,日志记录编号为u和v的日志记录由于其时间信息发生改变,因此时间信息被保留下来,而日志记录编号为n~t的日志记录的时间信息则以符号“#”替代原来的“[2000-01-01 00:10:41:584]”,使得时间信息所占的字节数由原来的24个字节变为替代后的1个字节,显著地降低了时间信息相同的日志记录的时间戳开销,有效降低了日志记录的时间戳信息在日志内容中的比重,从而进一步提高了日志压缩比和压缩效率。
本实施例所提出的日志压缩装置利用日志记录输出优先级遍历所有包含日志记录的文件,替代模块分别以唯一的编号替代文件中每一所述日志记录的字符串,从而缩短日志记录中字符串的长度,减少了字符串所占的字节数,提升了日志的压缩比,同时编码模块对字符串替代后的日志记录即已替代日志记录进行共时段日志共时间戳编码处理,即对于共时间段的日志记录,只保留第一条日志记录的时间信息,其他共时间段共时间戳的日志记录的时间信息均采用某一字符替代,因此编码模块对已替代日志记录进行的共时段日志共时间戳编码处理有效降低了时间信息相同的日志记录的时间戳开销,降低了日志记录的时间戳信息在日志内容中的比重,从而进一步提高了日志压缩比和压缩效率。
由于日志压缩装置中的替代模块是根据日志记录输出优先级遍历所有包含日志记录的文件并分别以唯一的编号对所述文件中每一所述日志记录的字符串进行替代的,因此在解压恢复原日志记录时,根据日志记录输出优先级进行解压恢复即可,减小了遍历所有文件中的日志记录的次数,有利于提高解压恢复日志记录的速度和效率。对于日志记录输出优先级的设定可以有多种方法,例如根据日志记录输出的频繁度或者重要程度等设定日志记录输出的优先级等,这里作为其中一种具体的实施方式,日志压缩装置还包括根据日志记录的信息重要等级设定日志记录输出优先级的优先级设定模块,优先级设定模块与替代模块连接,当日志记录的信息重要等级越高时,优先级设定模块设定日志记录对应的日志记录输出优先级越高。系统的日志记录能够反映出系统发生的事件的信息,由于发生的事件的重要程度不同,因此记录时间的日记记录所对应的信息重要程度也不尽相同,本实施方式中的优先级设定模块以日志记录的信息重要等级为依据,对日志记录的输出优先级进行排序,日志记录的信息重要等级越高,设定相应的日志记录输出优先级越高,从而实现对重要的日志记录的优先压缩输出,提高了日志压缩的可靠性和有效性。
作为一种具体的实施方式,日志压缩装置还包括存储模块,存储模块用于存储映射文件,该映射文件用于保存被编号替代的字符串并用于恢复原日志记录,存储模块与替代模块连接。在本实施方式中,替代模块根据日志记录输出优先级遍历所有包含日志记录的文件,并分别以唯一的编号替代每一文件中日志记录的字符串,得到已替代日志记录后,存储模块同时将被编号替代的字符串保存至映射文件中,对映射文件进行存储,且该映射文件将用于对压缩后的日志进行解码恢复,即存储模块将被编码替代掉的字符串另外单独保存到某一文本文件中,在后续对压缩后的日志进行解码恢复时,用于解码的模块可以利用该文本文件来准确地恢复原日志记录。本实施方式利用存储模块将被编号替代的字符串存储至映射文件中并对映射文件进行存储,在提高日志压缩比的基础之上,在对压缩后的日志进行解压恢复时,同时可以利用该映射文件实现对压缩后的日志的准确解压恢复,从而提高日志解压恢复的准确性和可靠性。
本发明日志压缩装置中各个模块其具体功能的实现方法,可以参照上述的日志压缩方法实施例中描述的实现方法,此处不再赘述。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。