通用日志(Log)模块设计

    在程序设计世界里,大大小小的项目都会有自己的日志模块。网络上有很多开源的Log模块,在这里算是以学习为目的重新造了一次轮子,也方便以后项目过程直接可以用上。

    按照abused老师的说法,设计一个Log模块需要注意以下几点:1.按照重要程度过滤Log信息,在程序设计阶段我们会打印一些调试信息,但是在程序release的时候要把调试信息关闭了。在这里,我把Log信息按照严重程度划分为8个级别:

typedef enum tagLogLevel
{
LC_LOG_PANIC = 0,
LC_LOG_ALERT = 1,
LC_LOG_CRIT = 2,
LC_LOG_ERR = 3,
LC_LOG_WARN = 4,
LC_LOG_NOTICE = 5,
LC_LOG_INFO = 6,
LC_LOG_DEBUG = 7,
LC_LOG_MAX = 8
}LogLevel;

     枚举从小到大严重程度依次递减。DEBUG纯粹是调试的时候打印,INFO答应一些信息,NOTICE提示一些轻微的警告信息,以此类推。

     2.按照模块过滤Log,大的项目由一些小模块组成,按照模块过滤Log利于更快的定位错误信息,系统太大,按照模块关闭一些模块,有利于我们查找错误所在,也节省了Log信息占用的资源。

     3.Log模块可配置,平时写控制台应用程序只需要把Log信息输出到控制台,真正项目过程中,Log信息有可能保存在文件里,也有可能通过串口,或者网络发送给其他模块,因此Log模块输出的可配置性也是关键。

     4.可变参数的支持,现在的编译器一般都支持可变参数,对于GNUC编译器还可以支持可变参数动态的参数检查:

void lc_log(LcLog* thiz, int level, const char* format, ...)
#ifdef __GNUC__
__attribute__(formate(printf, 2, 3))
#endif

    按照printf的参数风格对lc_log函数的2,3两个参数规则检查。

    5.编译器定义的一些和调试信息有关的宏。Log信息我们需要知道打印的时候,程序编译的时间,Log出自哪个文件的哪个函数等。编译器相关的一些宏主要有:__DATE__/__TIME__,标识程序编译的时间日期。__FILE__/__LINE__/__func__(GNUC)标识打印Log信息所在的文件位置信息。

    上传一个通用的Log小模块,需要的朋友可以在这里下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值