做爲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