C++的開源跨平臺日誌庫glog學習研究(一)

做爲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的特性或者說功能簡單摘抄以下(到處都有,不顯示引用原做了):

  1. 參數設置,以命令行參數的方式設置標誌參數來控制日誌記錄行爲;
  2. 嚴重性分級,根據日誌嚴重性分級記錄日誌;
  3. 可有條件地記錄日誌信息;
  4. 條件停止程序。豐富的條件斷定宏,可預設程序終止條件;
  5. 異常信號處理。程序異常狀況,可自定義異常處理過程;
  6. 支持debug功能。可只用於debug模式;
  7. 自定義日誌信息;
  8. 線程安全日誌記錄方式;
  9. 系統級日誌記錄;
  10. google perror風格日誌信息;
  11. 精簡日誌字符串信息。

好吧這裏仍是給出我引用的文章:   

http://google-glog.googlecode.com/svn/trunk/doc/glog.html#verbose

http://mengjh.blog.51cto.com/2860827/546766

相關文章
相關標籤/搜索