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/
中將會產生如下日誌檔案:
1234567
8
main.info -> main.ut1.test.log.info.20180715-130428.27339main.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 的功能,如下所示:
1234567
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 的日誌將被列印出來:
12
i0715 13:15:41.380611 29471 main.go:13] level 3 messagei0715 13:15:41.388777 29471 main.go:14] level 4 message
如果我們想對不同的檔案實行不同的日誌級別,可以用 vmodule 功能,如下**:
1234567
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,此時會輸出:
12
i0715 13:20:28.381611 30447 bar.go:6] level 4: level 4 message in bar.goi0715 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 原本的日誌級別:
1234
i -> infow -> 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 ...