glog的簡單入門,glog雖然在配置參數方面比較麻煩,但是在小規模程序中,由于其簡單靈活,也許會有優勢。
glog?是google的開源日志系統,相比較log4系列的日志系統,它更加輕巧靈活,而且功能也比較完善。?結合之前看的一些資料,?這里簡單對其做個簡介。
?
1,?安裝:
最新版本:0.3.1??http://code.google.com/p/google-glog/
安裝只需:./configure; make; make install
?
2,?簡單示例
main.cpp:
#include?<iostream>
#include?"glog/logging.h"???// glog?頭文件
using?namespace?std;
int?main(int?argc,?char** argv) {
? google::InitGoogleLogging(argv[0]);????//?初始化
??// FLAGS_log_dir="."; ? //設置log目錄
??LOG(INFO) <<?"hello glog";?????//?打印log:“hello glog.??類似于C++ stream。glog是什么意思。
}
Makefile:
LIB=$(HOME)/install/glog/lib??? #glog?安裝路徑
INCLUDE=$(HOME)/install/glog/include
test_glog : main.o
??????? g++ -o $@ $^ -L$(LIB) -lglog –lpthread?? #-lpthread?因為glog在多線程中需要一些鎖機制。
main.o: main.cpp
??????? g++ -c -o $@ $^ -I$(INCLUDE)
說明:
glog?默認對log分為4級:?INFO,? WARNING,? ERROR,? FATAL.??打印log語句類似于C++中的stream,實際上LOG(INFO)?宏返回的是一個繼承自std::ostrstream類的對象。
編譯運行上述demo,?glog默認會在/tmp/目錄下生成log日志文件:test_glog.search-x2.username.log.INFO.20111003-161341.2083
文件名各字段對應含義為:
<program name>.<hostname>.<user name>.log.<severity level>.<date>.<time>.<pid>
其中:
1),<program name>?其實對應google::InitGoogleLogging(argv[0]);中的argv[0],即通過改變google::InitGoogleLogging的參數可以修改日志文件的名稱。
2),每個級別的日志會輸出到不同的文件中。glog安裝,并且高級別日志文件會同樣輸入到低級別的日志文件中。?即:FATAL的信息會同時記錄在INFO,WARNING,ERROR,FATAL日志文件中。默認情況下,glog還會將會將FATAL的日志發送到stderr中。
?
現在的問題是:log總不能都打印到/tmp/目錄下吧。godot教程?下面的小結來解決:
?
3,?參數設置:
不同于log4系列的日志系統通過配置文件的方式,?glog采用命令的方式來來配置參數。在glog的官方文檔里,提到如下兩種方式來配置參數(以修改日志目錄為例:)
1),gflags:
./your_application --log_dir=.
(gflags?我還沒有使用過)
2),export?修改環境變量,如下所示:修改GLOG_log_dir為上層目錄
?
3)以上兩種方法都需要使用命令行,除此之外,還可以直接在程序中指定(官方文檔中沒有提到,?glog源代碼中也不鼓勵這么用,但確實是可行的):
在glog/logging.h?頭文件287---350行,有諸如“GLOG_log_dir”等變量的宏定義,?則其GLOG_log_dir實際為FLAGS_log_dir,??因此只需要在程序中設置FLAGS_log_dir的值即可。其他變量類似。取消main.cpp中的注釋行“// FLAGS_log_dir=".";?”?試試吧
?
4,??glog?支持功能列表如下:
1,?參數設置,以命令行參數的方式設置標志參數來控制日志記錄行為;
2,?嚴重性分級,根據日志嚴重性分級記錄日志;
3,?可有條件地記錄日志信息;
4,?條件中止程序。golang入門教程。豐富的條件判定宏,可預設程序終止條件;
5,?異常信號處理。程序異常情況,可自定義異常處理過程;
6,?支持debug功能。可只用于debug模式;
7,?自定義日志信息;
8,?線程安全日志記錄方式;
9,?系統級日志記錄;
10,?google perror風格日志信息;
11,?精簡日志字符串信息。
功能點1,2見demo實例。?其他功能見在如下鏈接講的簡單明了,在此也不一一細說:
1)官方文檔(英文):?http://google-glog.googlecode.com/svn/trunk/doc/glog.html#verbose
2)有網友的中文翻譯:http://mengjh.blog.51cto.com/2860827/546766
?
5,??總結:glog簡單易用,缺點感覺還是配置參數不如log4系列使用配置文件來的方便。在小規模程序(單元測試?功能點自測)中使用,應該是個不錯的選擇吧。
- LOG(INFO)?<<?"Hello?Glog";?
- #include<iostream>???
- #include<stdlib.h>???
- #include<stdio.h>???
- #include<string>???
- ???
- //glog???
- #include<glog/logging.h>???
- using?namespace?std;???
- ???
- int?main()???
- {???
- ????//?HOME_PATH???
- ????string?home?=?"./log/";??//要先創建此目錄,否則運行報錯.
- ????//glog?init???
- ????google::InitGoogleLogging(argv[0]);???
- ????string?info_log?=?home?+?"master_info_";???
- ????google::SetLogDestination(google::INFO,?info_log.c_str());???
- ????string?warning_log?=?home?+?"master_warning_";???
- ????google::SetLogDestination(google::WARNING,?warning_log.c_str());???
- ????string?error_log?=?home?+?"master_error_";???
- ????google::SetLogDestination(google::ERROR,?error_log.c_str());???
- ????string?fatal_log?=?home?+?"master_fatal_";???
- ????google::SetLogDestination(google::FATAL,?fatal_log.c_str());???
- ??????
- ????LOG(INFO)<<"Hello?Glog";??
- ????return?0;???
- }???
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态