随笔 - 51, 文章 - 1, 评论 - 41, 引用 - 0
数据加载中……

日志库优化——根据变化频率分类记录

问题:

        公司的一个程序运行一天的日志(单文件)是G级,压缩后是K级,存在大量的冗余信息。本文介绍一种针对该日志库的优化方法——根据变化频率分类记录。

 

场景:

        公司的日志库为单应用程序使用的动态库,将日志信息以字符串形式输出至文件。一条日志为一行,形式如下:

时间 级别 模块 函数名 文件名 行号 详细信息
2014-09-12 12:12:45.345 INFO Module Func1 d:\xxx\xxx.cpp 1230 函数返回,返回值2
2014-09-12 12:12:45.560 INFO Module Func2 d:\xxx\xxx.cpp 134 采用默认参数
2014-09-12 12:12:46.145 INFO Module Func1 d:\xxx\xxx.cpp 1230 函数返回,返回值3
2014-09-12 12:12:47.121 INFO Module Func2 d:\xxx\xxx.cpp 134 采用默认参数
…… …… ……

 

分析:

根据日志各属性的变化频率不同可分成三类:“时间”、“级别、模块、函数名、文件名和行号”和“详细信息”。该分类与日志在代码的位置有关。第一类属性不受位置影响,第二类则是位置相同则内容相同,第三类是位置相同内容可能相同。根据日志在代码的位置对其分类,类型信息单独记录,日志项只记录类型编号。

日志类型表:

编号 级别 模块 函数名 文件名 行号
1 INFO Module Func1 d:\xxx\xxx.cpp 1230
2 INFO Module Func2 d:\xxx\xxx.cpp 134

日志项表:

时间 编号 详细信息
2014-09-12 12:12:45.345 1 函数返回,返回值2
2014-09-12 12:12:45.560 2 采用默认参数
2014-09-12 12:12:46.145 1 函数返回,返回值3
2014-09-12 12:12:47.121 2 采用默认参数

此外“时间”项是定长,连续的两项之间只有尾部不同,因此只需要记录尾部变动的信息。“详细信息”项在类型相同的日志中变化小,因此只需记录变动的内容。

经过处理的日志项表:

时间 编号 详细信息
2014-09-12 12:12:45.345 1 函数返回,返回值2
560 2 采用默认参数
6.145 1 函数返回,返回值3
7.121 2  

 

 

缺点

该方法增加了运行时的内存占有率,并且日志需要借助工具还原。

posted on 2015-01-10 16:41 lemene 阅读(232) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理