在核心结构以外,google-glog还经过宏技巧提供统一简洁的使用接口。
同时,经过命名空间的使用尽量的减小名字冲突,提供一个简介的日志库。编程
宏助手
- 经过宏提供一个统一的简洁的日志输出接口
- 简单的使用如LOG(INFO),LOG(ERROR)等日志输出接口
- 经过宏提供丰富的日志输出扩展功能
编程技巧
- 命名空间的使用
- 由于是做为库使用,因此glog中使用了命名空间类避免名字冲突
- 经过google命名空间提供glog库的接口空间,内部实现则进一步封装到嵌套命名空间中
- 宏技巧:分流
- 经过DEBUG宏可将日志输出定位到LogMessage中仍是什么也不输出的NullStream中
- 宏技巧:隐藏
- 日志输出核心是经过LogMessage等类实现,同时经过宏提供了丰富的接口如条件日志,CHECK日志等
- 宏技巧:清洁
- 在使用宏过程当中,会在使用完成后进行#undef操做来保证库的宏不会干扰到使用库的程序
- 宏技巧:断言
- 在mutex.h中,经过定义#define MutexLock(x) ...来保证同步锁不会出现MutexLock *lock=new MutexLock(&mu)之类错误
- 宏技巧:技巧
- 1.在#if条件中使用# error,there is ... 直接输出错误消息的宏可在编译期间就给出错误提示
- 2.在宏定义中使用do{...}while(0)来保证宏内容做为一个总体,避免出现宏展开时的问题:
- 如#define call() a();b(),在调用if(1<0) call()时扩展成if(1<0) a(); b()后b()老是会被调用
小结
以上只是我参考了网上资料及阅读源代码时的总结,还没在实际项目中应用。
经过阅读源代码,也是一种享受。google