1. 程式人生 > 其它 >Golang語言--glog日誌庫使用

Golang語言--glog日誌庫使用

go語言有一個標準庫,log,提供了最基本的日誌功能,但是沒有什麼高階的功能,如果需要高階的特性,可以選擇glog或log4go。

glog是google提供的,類似於google的c++ log庫,使用起來非常簡單,下面介紹一下;log4go的用法和log4j一樣,可配置性比較高。

glog只提供了少數幾個選項,通過命令列控制,例如:

-log_dir: 日誌檔案儲存目錄

-alsologtostderr: 日誌寫入檔案的同時,輸出到stderr

-v:配置V輸出的等級。

glog使用非常簡單,只需要import就可以了。glog package的init函式會初始化並啟動一個glog 的flushDaemon協程,你只需要使用glog.Info, glog.Warning, glog.Error或glog.Fatal即可。

一個簡單的例子:

有幾點說明: 1、高等級的日誌會同時輸出到比它等級低的檔案中,例如error日誌會同時輸出到error檔案,warning檔案,info檔案中,依次類推;

2、啟動時,呼叫flag.Parse用來初始化glog的引數,例如xxx.exe -log_dir=”./” -v=3。如果不提供引數,log_dir目錄為 os.TempDir(),v的值為0

3、程式退出時,需要呼叫glog.Flush(),將日誌寫入檔案中。

4、V函式。預設的v選項為0,可以通過命令列設定v值。V函式的功能是,當V函式的引數高於glog的v值時,不會執行後續的Info函式,否則就執行。

glog.V(2).Info

相當於

if glog.V(2) {
    Info()
}

V的實現很精彩,有興趣可以看看原始碼。

5、執行示例,假設檔名為f.go

go build f.go
f.exe -log_dir="./" -v=3
f.exe -log_dir="./" -v=2

6、日誌檔名

日誌檔名由以下幾部分組成:

程式名.電腦名.使用者名稱.log.xxx.YYYYMMDD-HHMMSS.pid,其中

xxx為日誌等級,例如INFO,ERROR,WARNING

YYYYMMDD為年月日

HHMMSS為小時,分鐘,秒

pid是程序id

7、glog.Fatal的預設行為是輸出Fatal等級日誌,並強制程序退出,不過可以自定義Fatal的行為

8、glog還提供了vmodule這樣高階的用法,有興趣可以研究一下。

glog程式碼地址:

https://github.com/golang/glog