发明内容
针对相关技术中的问题,本发明提出一种缩减日志大小的方法及系统,以克服现有相关技术所存在的上述技术问题。
为此,本发明采用的具体技术方案如下:
一种缩减日志大小的方法,该方法包括以下步骤:
S1、对预先配置的日志进行源代码编写及源代码处理,得到被缩减日志;
S2、采用预设方法将被缩减日志还原成详尽日志。
进一步的,所述对预先配置的日志进行源代码编写及源代码处理,得到被缩减日志还包括以下步骤:
S11、使用特殊关键字作为日志记录的函数名/宏定义,编写带特殊标记的日志输出源代码;
S12、使用文本处理语言/工具匹配查找所述特殊关键字,并保存映射表。
进一步的,所述使用文本处理语言/工具匹配查找所述特殊关键字,并保存映射表还包括以下步骤:
S121、自动生成日志身份标记;
S122、将日志的输出格式转变为日志身份标记参数集;
S123、将日志身份标记与预先配置的日志文本参数集之间的映射关系保存到指定服务器。
进一步的,所述日志身份标记参数集由日志身份标记与显示占用容量大小构成;
所述日志文本参数集由日志文本部分与显示占用容量大小构成。
进一步的,所述自动生成日志身份标记之前还包括以下步骤:
S120、采用预先配置的文本处理语言/工具在源代码中匹配查找特殊关键字,并分两次遍历源代码。
进一步的,所述采用预设方法将被缩减日志还原成详尽日志还包括以下步骤:
S21、采用预设规则从被缩减日志的首部及占用量大小提取出日志身份标记;
S22、根据日志身份标记与日志文本参数集之间的映射关系得到日志文本部分,并按实际占用大小从日志剩余部分中提取出参数,并得到剩余日志参数集;
S23、将日志文本部分的参数占位项替换成剩余日志参数集,还原得到单条详尽日志;
S24、将提取后的剩余日志作为整体,重复步骤S21,直到日志完结。
根据本发明的另一个方面,还提供了一种缩减日志大小的系统,该系统包括:
编写与处理模块,用于对预先配置的日志进行源代码编写及源代码处理,得到被缩减日志;
日志还原模块,用于采用预设方法将被缩减日志还原成详尽日志。
进一步的,所述对预先配置的日志进行源代码编写及源代码处理,得到被缩减日志还包括以下步骤:
S11、使用特殊关键字作为日志记录的函数名/宏定义,编写带特殊标记的日志输出源代码;
S12、使用文本处理语言/工具匹配查找所述特殊关键字,并保存映射表。
进一步的,所述使用文本处理语言/工具匹配查找所述特殊关键字,并保存映射表还包括以下步骤:
S121、自动生成日志身份标记;
S122、将日志的输出格式转变为日志身份标记参数集;
S123、将日志身份标记与预先配置的日志文本参数集之间的映射关系保存到指定服务器;
其中,所述日志身份标记参数集由日志身份标记与显示占用容量大小构成;
所述日志文本参数集由日志文本部分与显示占用容量大小构成。
进一步的,所述采用预设方法将被缩减日志还原成详尽日志还包括以下步骤:
S21、采用预设规则从被缩减日志的首部及占用量大小提取出日志身份标记;
S22、根据日志身份标记与日志文本参数集之间的映射关系得到日志文本部分,并按实际占用大小从日志剩余部分中提取出参数,并得到剩余日志参数集;
S23、将日志文本部分的参数占位项替换成剩余日志参数集,还原得到单条详尽日志;
S24、将提取后的剩余日志作为整体,重复步骤S21,直到日志完结。
本发明的有益效果为:既可以尽可能地减少日志输出的容量,又可以让日志查看人员看到直观详尽的信息;额外的,当无关人员获取到日志的输出,但没有本发明提供的对应工具或者对应源代码的支持,就只能看到一连串字节流而不清楚其具体含义,因此,使用本技术还有日志加密的功能。
具体实施方式
为进一步说明各实施例,本发明提供有附图,这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理,配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点,图中的组件并未按比例绘制,而类似的组件符号通常用来表示类似的组件。
根据本发明的实施例,提供了一种缩减日志大小的方法及系统。
现结合附图和具体实施方式对本发明进一步说明,如图1所示,根据本发明实施例的缩减日志大小的方法,该方法包括以下步骤:
S1、对预先配置的日志进行源代码编写及源代码处理,得到被缩减日志;
具体的,步骤S1中令日志输出占用容量尽可能小。
S2、采用预设方法将被缩减日志还原成详尽日志。
具体的,步骤S2中令日志查看人员可以直观地查看日志文本;经过步骤S1加工完的源代码,在编译/部署/运行后会输出精简日志,也就是被缩减日志。
在一个实施例中,所述对预先配置的日志进行源代码编写及源代码处理,得到被缩减日志还包括以下步骤:
S11、使用特殊关键字作为日志记录的函数名/宏定义,编写带特殊标记的日志输出源代码;
具体的,日志的文本部分可以做到尽可能的详尽,但其携带的每一个参数均需显式标识出其占用容量的大小(字节数)。
具体的实现方式如下:
可采用SPECIAL_LOG作为日志记录的函数名/宏定义,可采用U8、S8、U16、S16、U32、S32来标识参数占用的字节数(U8、S8表示1字节,U16、S16表示2字节,U32、S32表示4字节)。可替代的,也可采用B1、B2、B3、B4来分别表示1、2、3、4字节;或者采用其它自定义的标识。SPECIAL_LOG这一函数/宏定义在实际运行中不作任何动作,只是为下一步骤做准备。
此外,程序员在编写日志时应尽可能详尽,不必考虑文本长度。
以下为具体的两个实例:
SPECIAL_LOG(“CELL(%d),state(%d),receive unexpect message(0x%x),docell delete”,(U16)CellId,(U8)CellState,(U32)MessageId);
本例中,此日志带3个参数,参数容量大小依次为2字节、1字节、4字节。
SPECIAL_LOG(“user shutdown system,will reboot in 30seconds”);
本例中,此日志带0个参数。
S12、使用文本处理语言/工具匹配查找所述特殊关键字,并保存映射表。
在一个实施例中,所述使用文本处理语言/工具匹配查找所述特殊关键字,并保存映射表还包括以下步骤:
S121、自动生成日志身份标记;
S122、将日志的输出格式转变为日志身份标记参数集;
S123、将日志身份标记与预先配置的日志文本参数集之间的映射关系保存到指定服务器。
在一个实施例中,所述日志身份标记参数集由日志身份标记与显示占用容量大小构成;
所述日志文本参数集由日志文本部分与显示占用容量大小构成。
在一个实施例中,所述自动生成日志身份标记之前还包括以下步骤:
S120、采用预先配置的文本处理语言/工具在源代码中匹配查找特殊关键字,并分两次遍历源代码。
具体的,本步骤应在源代码编译/部署之前执行,采用python(一种解释型、面向对象、动态数据类型的高级程序设计语言;可用于编写简洁的文本处理程序)作为文本处理语言,在源代码中匹配查找特殊关键字SPECIAL_LOG;需要分两次遍历源代码。
第一次遍历:
得到日志记录的总个数,该个数可确定log ID(日志身份标记)的占用容量大小,如总个数小于等于256,则log ID(日志身份标记)占用1字节,如总个数小于等于65536,则log ID(日志身份标记)占用2字节,依此类推。
第二次遍历:
1)将日志的输出转化为“log ID(日志身份标记)+不固定数目不固定容量大小的参数集”的输出,其中log ID(日志身份标记)为查找到特殊关键字SPECIAL_LOG的当前次数-1。
举例说明,假如原始的日志输出源代码只有以下两处:
SPECIAL_LOG(“CELL(%d),state(%d),receive unexpect message(0x%x),docell delete”,(U16)CellId,(U8)CellState,(U32)MessageId);
SPECIAL_LOG(“user shutdown system,will reboot in 30seconds”);
第一处日志的log ID(日志身份标记)为0,生成的精简日志输出源代码为以下四行(假设日志输出总个数为2,小于256,因此log ID(日志身份标记)占用1字节):
OUTPUT_1byte(0);
OUTPUT_2byte((U16)CellId);
OUTPUT_1byte((U8)CellState);
OUTPUT_4byte((U32)MessageId);
上面生成的代码中,第一行“OUTPUT_1bytes(0)”括号中的0即本条日志的log ID0。
上面生成的代码中,OUTPUT_1byte,OUTPUT_2byte,OUTPUT_4byte分别表示输出1、2、4字节的日志。
第二处日志的log ID(日志身份标记)为1,生成的精简日志输出源代码为以下一行:
OUTPUT_1byte(1);
上面生成的代码中,第一行“OUTPUT_1bytes(1)”括号中的1即本条日志的log ID(日志身份标记)1。
2)记录下log ID(日志身份标记)的占用容量大小,及其对应的日志文本部分和各参数占用容量大小。
记录分两部分:
第一部分,记录log ID(日志身份标记)占用容量大小。本例中,log ID(日志身份标记)占1字节。
第二部分,记录log ID(日志身份标记)对应的日志文本部分,以及各参数占用容量大小。
以上例为例,映射关系将以以下表格的形式记录:
表1:对应的日志文本部分和各参数占用容量大小
在一个实施例中,所述采用预设方法将被缩减日志还原成详尽日志还包括以下步骤:
S21、采用预设规则从被缩减日志的首部及占用量大小提取出日志身份标记;
S22、根据日志身份标记与日志文本参数集之间的映射关系得到日志文本部分,并按实际占用大小从日志剩余部分中提取出参数,并得到剩余日志参数集;
S23、将日志文本部分的参数占位项替换成剩余日志参数集,还原得到单条详尽日志;
S24、将提取后的剩余日志作为整体,重复步骤S21,直到日志完结。
具体的,被缩减日志还原成详尽日志,以下通过具体实例来讲解:
假如实际运行中输出的日志有17字节,分别为:
“0x00 0x00 0x01 0x02 0x00 0x31 0x40 0x98 0x00 0x00 0x03 0x04 0x000x21 0x3F 0x45 0x01”;
(一)根据上一流程记录的log ID(日志身份标记)占用容量大小,提取log ID(日志身份标记);
本例中,log ID(日志身份标记)占1字节,提取1字节数据:0x00,得出本条日志的log ID(日志身份标记)为0;
剩余日志16字节:“0x00 0x01 0x02 0x00 0x31 0x40 0x98 0x00 0x00 0x030x04 0x00 0x21 0x3F 0x45 0x01”;
(二)根据上一流程记录的映射表得到日志文本部分,并继续提取日志参数;
log ID 0对应的日志文本部分为:
CELL(%d),state(%d),receive unexpect message(0x%x),do cell delete;
对应的参数有3个,分别占用2字节、1字节、4字节,继续分别提取2、1、4个字节得到3个参数;
0x0001、0x02、0x00314098;
此时剩余日志9个字节:0x00 0x00 0x03 0x04 0x00 0x21 0x3F 0x45 0x01;
(三)日志文本部分中的占位符用上个步骤得到参数替换掉,得到详尽日志;
本例中,用3个参数0x0001、0x02、0x00314098分别替换掉占位符%d、%x得到详尽日志:
CELL(0),state(2),receive unexpect message(0x314098),do cell delete;
(四)从步骤(一)开始,继续解析剩余9字节被缩减日志;
得到log ID 0;
得到对应日志文本部分为:
CELL(%d),state(%d),receive unexpect message(0x%x),do cell delete;
按2字节、1字节、4字节提取3个参数为:
0x0003 0x04 0x00213F45;
剩余日志1字节:0x01;
替换掉占位符得到详尽日志为:
CELL(3),state(4),receive unexpect message(0x213F45),do cell delete;
(五)从步骤(一)开始,继续解析剩余1字节被缩减日志;
得到log ID 1;
得到对应日志文本部分为:
user shutdown system,will reboot in 30seconds;
无参数,无需替换占位符;
无剩余日志。
步骤S2结束。
本例中,17个字节的被缩减日志还原成的全部详尽日志为:
CELL(0),state(2),receive unexpect message(0x314098),do cell delete;
CELL(3),state(4),receive unexpect message(0x213F45),do cell delete;
user shutdown system,will reboot in 30seconds。
根据本发明的另一个实施例,如图2所示,还提供了一种缩减日志大小的系统,该系统包括:
编写与处理模块,用于对预先配置的日志进行源代码编写及源代码处理,得到被缩减日志;
日志还原模块,用于采用预设方法将被缩减日志还原成详尽日志。
在一个实施例中,所述对预先配置的日志进行源代码编写及源代码处理,得到被缩减日志还包括以下步骤:
S11、使用特殊关键字作为日志记录的函数名/宏定义,编写带特殊标记的日志输出源代码;
S12、使用文本处理语言/工具匹配查找所述特殊关键字,并保存映射表。
在一个实施例中,所述使用文本处理语言/工具匹配查找所述特殊关键字,并保存映射表还包括以下步骤:
S121、自动生成日志身份标记;
S122、将日志的输出格式转变为日志身份标记参数集;
S123、将日志身份标记与预先配置的日志文本参数集之间的映射关系保存到指定服务器;
其中,所述日志身份标记参数集由日志身份标记与显示占用容量大小构成;
所述日志文本参数集由日志文本部分与显示占用容量大小构成。
在一个实施例中,所述采用预设方法将被缩减日志还原成详尽日志还包括以下步骤:
S21、采用预设规则从被缩减日志的首部及占用量大小提取出日志身份标记;
S22、根据日志身份标记与日志文本参数集之间的映射关系得到日志文本部分,并按实际占用大小从日志剩余部分中提取出参数,并得到剩余日志参数集;
S23、将日志文本部分的参数占位项替换成剩余日志参数集,还原得到单条详尽日志;
S24、将提取后的剩余日志作为整体,重复步骤S21,直到日志完结。
综上所述,借助于本发明的上述技术方案,既可以尽可能地减少日志输出的容量,又可以让日志查看人员看到直观详尽的信息;额外的,当无关人员获取到日志的输出,但没有本发明提供的对应工具或者对应源代码的支持,就只能看到一连串字节流而不清楚其具体含义,因此,使用本技术还有日志加密的功能。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。