做为C++领域中为数很少的好用、高效的、跨平台的日志工具,Google的开源日志库glog也算是百里挑一了。glog 是一个C++实现的应用级日志记录框架,提供了C++风格的流操做。html
恰巧趁着五一我也学习研究了这个glog库,写个总结以下。走过路过的的各位牛人、高手能够忽略这篇文章了。安全
从code.google.com下载源码(在这里),在Visual Studio 2010中打开工程,以下:框架
可见只有四个工程,其中libglog和libglog_static分别是Windows下的动态库和静态库,其实代码都是同样的,另外两个工程分别是测试工程(也是同一套代码),看名字都就知道了。svn
glog实现代码并很少,代码量统计以下:函数
从上面看出真正有效的C/C++代码也就8000行之内吧。工具
直接编译,注意,居然不能编译经过!!!我这里下载的是SVN 地址http://google-glog.googlecode.com/svn/trunk/上的r142版本,从编译错误能够找到缘由,简单修改便可所有编译成功,就是将文件logging.cc中的第18三、18九、19九、205行的ssize_t改成size_t,以下:学习
实在不明白为何还有这种状况发生,难道不该该至少保证编译没问题才会commit代码的么。而直接下载的稳定版(glog-0.3.3.tar.gz )则没有这个问题,看来开发版本都是不可靠的啊。测试
把全部代码从每一个文件的代码量和实现复杂度作一个总体分析。google
按代码行数排序:spa
按复杂度排序(复杂度定义在不一样工具中有不一样表示,这里仅做参考):
从这里也基本能看出重要的文件或函数实现了。另外按复杂度排序是排名第一的文件叫作demangle.cc,你在VS工程里并无发现有这个cc,甚至都没有include相应的demangle.h,这个文件是干吗的?随后再做分析(其实单看文件名就基本能猜到了)。
其中logging.cc是主要的功能实现,对该文件的分析以下:
logging.cc中函数复杂度以下:
固然,不一样人使用不一样的分析工具,致使上面的结果会有必定的差别,仍以logging.cc为例,使用另外工具分析函数复杂度部分结果以下:
注意函数LogFileObject::Write和TruncateLogFile的复杂度排序计算值和排序顺序都不相同,但整体上来讲都算是正常的,也算是都能管中窥豹吧。
有了这些简单的统计分析,接下来浏览代码就相对有方向性了,不过话说这个代码量整体来讲也很少。像该代码中使用了大量的宏技巧,初看仍是很差理解的,接下来会从代码上作点分析理解。
一直没有介绍glog,可是,若是你了解glog,那你确定知道些什么了。最后把glog的特性或者说功能简单摘抄以下(到处都有,不显示引用原做了):
好吧这里仍是给出我引用的文章:
http://google-glog.googlecode.com/svn/trunk/doc/glog.html#verbose