如何使用Google日誌庫

2021-10-04 03:24:25 字數 3764 閱讀 5108

google glog 是乙個c++語言的應用級日誌記錄框架,提供了 c++ 風格的流操作和各種助手巨集。

1、開源專案首頁已經從遷移到

4、不需要更改工程屬性。平台工具集是否是windows xp(v140_xp)好像並不影響。glog不支援unicode寬字符集,工程屬性字符集保持多位元組字符集。「c/c++」-「**生成」中的「執行庫」,libglog動態庫工程必須選擇「多執行緒dll」或「多執行緒除錯dll」,libglog_static靜態庫工程必須選擇「多執行緒」或「多執行緒除錯」。

5、按需要編譯庫。以靜態庫為例,動態庫多一步將libglog.dll拷貝到程式目錄下。分別編譯debug和release,將debug版的重新命名為libglog_static_d.lib。將編譯的lib檔案拷貝到根目錄\src\glog下,\src\glog是頭檔案目錄。這個版本的靜態庫在試用時並未發現有記憶體洩露問題。

6、將\glog目錄(包括了標頭檔案和庫檔案)拷貝到自己的工程目錄下。也可以新建另外的庫目錄,也可以在工程屬性的附加目錄中增加相應目錄,這裡採用在**檔案中控制。在工程資源管理器中新增glog標頭檔案,如果先新增glog目錄再新增標頭檔案會提示glog標頭檔案中的#include路徑出錯,手動刪除路徑中的「glog\」可解決。

7、在需要的地方#include "glog/logging.h"。建議新增到stdafx.h中。 

8、使用靜態庫必須新增#define google_glog_dll_decl。動態庫不必新增。

9、因windows.h中定義的巨集error,與glog中定義的巨集error衝突,所以如果#include 後要新增#define glog_no_abbreviated_severities,並且**中要用google::glog_error來代替原來的google::error,相應的其他也改為:glog_info、glog_warning、glog_fatal。

10、新增庫檔案:#pragma comment(lib,"glog/libglog_static.lib")。針對debug和release版,用#ifdef控制。

#define google_glog_dll_decl

#define glog_no_abbreviated_severities

#include "glog/logging.h"

#ifdef debug

#pragma comment(lib,"glog/libglog_static_d.lib")

#else

#pragma comment(lib,"glog/libglog_static.lib")

#endif // debug

11、自己的工程使用靜態庫時,必須選擇「多執行緒」或「多執行緒除錯」。使用動態庫則選擇「多執行緒dll」或「多執行緒除錯dll」。

12、使用glog之前必須先初始化庫,要生成日誌檔案只需在開始log之前呼叫一次:

google::initgooglelogging(ar**[0]);  //括號內是程式名

13、設定日誌檔案儲存目錄,這個目錄必須是已經存在的,否則不能生成日誌檔案。必須在初始化庫之前呼叫。

flags_log_dir = "c:\\logs";

14、glog 有四個錯誤級別,列舉如下:

enum severitylevel

;15、輸出日誌:

log(info) << "info test";  //輸出乙個info日誌

log(warning) << "warning test";  //輸出乙個warning日誌

log(error) << "error test";  //輸出乙個error日誌

log(fatal) << "fatal test";  //輸出乙個fatal日誌,這是最嚴重的日誌並且輸出之後會中止程式

16、條件輸出:

log_if(info, num_cookies > 10) << "got lots of cookies";  //當條件滿足時輸出日誌

log_every_n(info, 10) << "got the " << google::counter << "th cookie";  //google::counter 記錄該語句被執行次數,從1開始,在第一次執行輸出日誌之後,每隔 10 次再輸出一次日誌資訊

log_if_every_n(info, (size > 1024), 10) << "got the " << google::counter << "th big cookie";  //上述兩者的結合,不過要注意,是先每隔 10 次去判斷條件是否滿足,如果滯則輸出日誌;而不是當滿足某條件的情況下,每隔 10 次輸出一次日誌資訊

log_first_n(info, 20) << "got the " << google::counter << "th cookie";  //當此語句執行的前 20 次都輸出日誌,然後不再輸出

17、幾個函式:

google::setlogdestination(google::glog_info, "log/prefix_");  //設定特定嚴重級別的日誌的輸出目錄和字首。第乙個引數為日誌級別,第二個引數表示輸出目錄及日誌檔名字首

google::setlogfilenameextension("logextension");  //在日誌檔名中級別後新增乙個副檔名。適用於所有嚴重級別

google::setstderrlogging(google::glog_info);  //大於指定級別的日誌都輸出到標準輸出

18、幾個引數設定:

flags_logtostderr = true;  //設定日誌訊息是否轉到標準輸出而不是日誌檔案

flags_alsologtostderr = true;  //設定日誌訊息除了日誌檔案之外是否去標準輸出

flags_colorlogtostderr = true;  //設定記錄到標準輸出的顏色訊息(如果終端支援)

flags_log_prefix = true;  //設定日誌字首是否應該新增到每行輸出

flags_logbufsecs = 0;  //設定可以緩衝日誌的最大秒數,0指實時輸出

flags_max_log_size = 10;  //設定最大日誌檔案大小(以mb為單位)

flags_stop_logging_if_full_disk = true;  //設定是否在磁碟已滿時避免日誌記錄到磁碟

19、google日誌庫使用例項

幾個比較簡單的選項 :

1、裡面有以flags_ 開頭的全域性變數,可以代替以 glog_ 開頭的環境變數,flags_log_dir = "./"; //等效於設定環境變數 glog_log_dir = "./" ,而且前者優先順序高。每個glog_開頭的設定項都有對應的flags_開頭的全域性變數,在程式記錄日誌前修改有效。

2、//設定日誌檔案路徑,指定其基本名稱

google::setlogdestination(google::info,"./mylog_");//大於info級別的,記錄在當前目錄,檔案以為mylog_字首

google::setlogdestination(google::error,"");//不為error建立日誌檔案

google::setlogdestination(google::warning,"");

3、//其他配置

google::setstderrlogging(google::info);//配置輸出到標準錯誤輸出的最低日記級別。

google::logtostderr();//只輸出到標準錯誤輸出

測試**如下。

#include

int main(int argc, char* ar**)

return 0;}

如何使用 google 搜尋

例如,搜尋 joe bloggs 時,搜尋引擎會返回同時跟 joe 和 bloggs 相關的結果,而搜尋 joe bloggs 時,搜尋引擎只返回跟 joe bloggs 相關的結果。準確搜尋會排除常見但相關度偏低的資訊,會提高搜尋的精確性。如果準確搜尋不能得到想要的結果,你可以通過使用減號的方式來...

如何使用Logmnr方法分析資料庫日誌

您是不是在資料庫日誌問題上而頭痛呢?您是不是在苦於沒有想到乙個方便的解決方法而苦惱呢?本文用舉例的形式來講解使用logmnr方法分析資料庫日誌。一 安裝logminer工具 以下兩個指令碼以sysdba身份執行 oracle home rdbms admin dbmslm.sql oracle ho...

google的glog日誌管理

在做c c 專案的時候,開發階段,日誌資訊越詳細越好,出問題一目了然,當然,所占用的空間自然越多。如果專案上線,沒有日誌的控制管理,後續的問題會很麻煩。比如 日誌量大,磁碟空間不夠用,也很難選出有用的日誌。所以找了一些相關的開源的日誌管理 最終選擇了google的glog,為什麼?因為覺得它簡單實用...