Golang glog使用詳解

2022-07-03 23:30:20 字數 4098 閱讀 5524

golang/glog

是 c++ 版本 

google/glog

的 go 版本實現,基本實現了原生 glog 的日誌格式。在 kuberntes 中,glog 是預設日誌庫。

glog 將日誌級別分為 4 種,分別是:

當我們執行:

1

$ mkdir -p log && go run main.go -log_dir=log -alsologtostderr

以上列印日誌將會同時列印在log/目錄和標準錯誤輸出中(-alsologtostderr)。

其中在log/中將會產生如下日誌檔案:

123

4567

8

main.info -> main.ut1.test.log.info.20180715-130428.27339

main.warning -> main.ut1.test.log.warning.20180715-130428.27339

main.error -> main.ut1.test.log.error.20180715-130428.27339

main.fatal -> main.ut1.test.log.fatal.20180715-130428.27339

main.ut1.test.log.error.20180715-130428.27339

main.ut1.test.log.fatal.20180715-130428.27339

main.ut1.test.log.info.20180715-130428.27339

main.ut1.test.log.warning.20180715-130428.27339

其中main.info這類檔案表示的是info日誌對應的符號鏈結。當單個日誌檔案達到一定大小時,glog 將會有 rotate 的動作:即關閉已經滿量的檔案,新建日誌檔案

glog 最常用的就是 v level 的功能,如下所示:

123

4567

89

func main() 

當我們重新執行:

1

$ go run main.go -log_dir=log -alsologtostderr

將不會看到任何輸出,因為日誌級別不夠,我們通過指定日誌級別(-v,log level):

1

$ go run main.go -v=4 -log_dir=log -alsologtostderr

此時,日誌級別小於或等於 4 的日誌將被列印出來:

1

2

i0715 13:15:41.380611   29471 main.go:13] level 3 message

i0715 13:15:41.388777 29471 main.go:14] level 4 message

如果我們想對不同的檔案實行不同的日誌級別,可以用 vmodule 功能,如下**:

123

4567

8910

func main() 

其中bar()的實現在bar.go

123

func bar() 

當我們執行:

1

$ go run main.go bar.go -v=3 -log_dir=log -alsologtostderr -vmodule=bar=5

對所有檔案的日誌級別設定為 3 (-v=3),但是對bar.go-vmodule的輸入引數省去.go字尾,且必須以-vmodule=recordio=2,file=1,gfs*=3的語法格式)的日誌級別設定為 5,此時會輸出:

1

2

i0715 13:20:28.381611   30447 bar.go:6] level 4: level 4 message in bar.go

i0715 13:20:28.383866 30447 main.go:14] level 3 message

通過該功能,可以對指定模組採用不同日誌級別的輸出,可有效提公升除錯效率。

tracelocation 的命令格式為-log_backtrace_at=gopherflakes.go:234,當執行到指定**處時,將把該**的棧資訊列印出來,延續上面的**,我們執行:

1

$ go run main.go bar.go -v=3 -log_dir=log -alsologtostderr -vmodule=bar=5 -log_backtrace_at=bar.go:6

可見如下輸出:

123

i0715 13:28:17.915837   31920 bar.go:6] level 4: level 4 message in bar.go

... 列印 backtrace,此處省略 ...

i0715 13:28:17.923715 31920 main.go:14] level 3 message

從上面的例子可以看出,glog 列印的日誌基本格式為:

1

] 

header 和 message 之間用]分隔。其中 header 的格式為:

1

lmmdd hh:mm:ss.uuuuuu threadid file:line

這裡要注意的是l,它代表了 glog 原本的日誌級別:

123

4

i -> info

w -> warning

e -> error

f -> fatal

後面幾個字段分別代表的是時間資訊。在 c++ 中,threadid表示的是執行緒資訊,但在 go 版本實現中,threadid是程序 pid,即os.getpid()的呼叫結果。

這部分詳細**可參考:glog.go中的formatheader()函式。

其實,用 go 實現乙個日誌庫並不困難,其本質就是:在 buffer 中寫入格式化的內容並定期刷入檔案中。glog 的基本實現邏輯也是如此。

深入學習 go 語言函式呼叫資訊

an example of how to use golang/glog

Regmon使用詳解

新近安裝foxmail 5.0正式版,卻發現只能收取而不能傳送郵件。經過一番檢查確定,網路正常,foxmail設定也正確。那麼究竟是 何方神聖 在暗中搗鬼呢?甭急,咱先請來個 福爾摩斯 regmon幫忙查出 真兇 regmon v6.12小檔案 軟體版本 6.12 軟體大小 82 kb 軟體性質 免...

FCKeditor使用詳解

fckeditor 的.net 2.0核心庫 說明 fckeditor2.6.3.zip是其最新的檔案和什麼的 fckeditor.net.zip是asp.net呼叫的dll在裡面。2.分別解壓後把fckeditor2.6.3.zip裡的fckeditor目錄整個複製到 中。3.解壓fckedito...

c const使用詳解

關於c 中的const關鍵字的用法非常靈活,而使用const將大大改善程式的健壯性,現將本人的一些體會總結如下,期望對大家有所幫助 一 const基礎 如果const關鍵字不涉及到指標,我們很好理解,下面是涉及到指標的情況 int b 500 const int a b 1 int const a ...