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,為什麼?因為覺得它簡單實用...