glog 入門教程
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。
}
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),每個級別的日誌會輸出到不同的檔案中。並且高階別日誌檔案會同樣輸入到低階別的日誌檔案中。 即:FATAL的資訊會同時記錄在INFO,WARNING,ERROR,FATAL日誌檔案中。預設情況下,glog還會將會將FATAL的日誌傳送到stderr中。
現在的問題是:log總不能都列印到/tmp/目錄下吧。下面的小結來解決:
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, 條件中止程式。豐富的條件判定巨集,可預設程式終止條件;
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;
- }
相關文章
- glog 使用教程 轉載
- glog 編譯報錯 GLOG_NO_ABBREVIATED_SEVERITIES編譯
- Iptables入門教程
- vue入門教程Vue
- Redux入門教程Redux
- Electron入門教程
- Aseprite入門教程
- Twisted 入門 教程
- flask入門教程Flask
- Maven入門教程Maven
- awk 入門教程
- HBase入門教程
- Jmeter入門教程JMeter
- Elasticsearch入門教程Elasticsearch
- SnapKit入門教程APK
- Tmux入門教程UX
- Docker 入門教程Docker
- Thrift 入門教程
- Vuex入門教程Vue
- CMake入門教程
- RabbitMQ入門教程MQ
- mybatis入門教程MyBatis
- Git入門教程Git
- docker入門教程Docker
- tcpdump教程入門TCP
- Circos入門教程
- Vim入門教程
- OpenStack 入門教程
- React 入門教程React
- Webpack 入門教程Web
- Guzzle 入門教程
- ZooKeeper 入門教程
- Ceph入門教程
- Dart 入門教程Dart
- 新手入門,webpack入門詳細教程Web
- Android入門教程 | RecyclerView使用入門AndroidView
- git 入門教程之github 教程Github
- Kafka教程(一)Kafka入門教程Kafka