欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Golang中日志庫glog的使用

 更新時間:2023年09月13日 08:20:48   作者:橙子家  
golang/glog?是?C++?版本?google/glog?的?Go?版本實現(xiàn),基本實現(xiàn)了原生?glog?的日志格式,下面大家就跟隨小編一起了解一下glog的具體使用吧

〇、前言

golang/glog 是 C++ 版本 google/glog 的 Go 版本實現(xiàn),基本實現(xiàn)了原生 glog 的日志格式。

在 Kuberntes 中,glog 是默認日志庫。因此需要詳細了解下。下面列舉下 glog 的特點:

  • 高效性:glog 采用了異步寫入日志的方式,這意味著日志記錄操作不會阻塞主程序的執(zhí)行。它還使用了緩沖區(qū)來收集日志消息,并在后臺線程中將它們寫入磁盤。這種異步寫入機制可以顯著提高應用程序的性能。
  • 靈活配置:glog 允許您通過命令行參數(shù)或配置文件來自定義日志輸出的行為??梢灾付ㄒ涗浀娜罩炯墑e、日志文件的路徑、是否同時輸出到標準錯誤流等。這使得 glog 非常適合于不同環(huán)境和需求的應用程序。
  • 日志級別控制:glog 支持不同的日志級別,包括 INFO、WARNING、ERROR、FATAL 等。可以根據(jù)需要,選擇要記錄的日志級別,以便及時發(fā)現(xiàn)關鍵的日志信息。
  • 日志格式化:glog 提供了豐富的日志格式化選項,允許您按照自己的喜好定義日志的輸出格式。您可以指定時間戳、源代碼位置、日志級別等信息的顯示方式,以及自定義的文本和變量的輸出。
  • 日志回滾:glog 支持日志文件的自動回滾功能,可以根據(jù)文件大小或日期來切分日志文件。這樣可以避免單個日志文件過大導致難以管理和分析。
  • 跨平臺支持:glog 是一個跨平臺的日志庫,可以在不同的操作系統(tǒng)上使用。它提供了對 Unix、Linux 和 Windows 等主流操作系統(tǒng)的支持。

強大功能且簡單易用的 glog 日志庫,為 GO 語言開發(fā)者提供了一種高效、靈活和可定制的日志記錄解決方案。無論是小型項目還是大規(guī)模應用程序,glog 都能滿足日常的日志需求,也能協(xié)助開發(fā)者更好地理解和調試代碼。

glog 的基本實現(xiàn)邏輯就是,在 buffer 中寫入格式化的內(nèi)容并定期刷入文件中。

一、glog 詳細介紹

1.1 日志級別與測試

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

  • INFO:一般日志,可用于記錄程序運行狀態(tài);
  • WARNING:警告日志,記錄潛在的問題或錯誤;
  • ERROR:錯誤日志,記錄程序運行中一些可恢復的錯誤,可能導致程序功能受限或出現(xiàn)異常情況,但是不會導致系統(tǒng)崩潰;
  • FATAL:嚴重錯誤日志,程序遇到一個不可恢復的錯誤,在打印完日志后程序將會自動退出(os.Exit()

開始測試之前,準備工作:

// 1.創(chuàng)建文件夾和文件:./src/glog/main.go
// 2.初始化和整理當前模塊(添加或刪除)
go mod init
go mod tidy
// 3.拉取必要的庫 glog
go get github.com/golang/glog

如下為 main.go 文件中的代碼:

package main
import (
	"flag"
	"github.com/golang/glog"
)
func main() {
    // 用于解析命令行中 - 橫線后邊的參數(shù)和值,如下示例中的:-log_dir=log -alsologtostderr
    // go run main.go -log_dir=log -alsologtostderr
	flag.Parse()
    // defer() 退出前執(zhí)行,清空緩存區(qū),將日志寫入文件
	defer glog.Flush()
	glog.Info("This is info message")
	glog.Infof("This is info message: %v", 12345)
	glog.InfoDepth(1, "This is info message", 12345)
	glog.Warning("This is warning message")
	glog.Warningf("This is warning message: %v", 12345)
	glog.WarningDepth(1, "This is warning message", 12345)
	glog.Error("This is error message")
	glog.Errorf("This is error message: %v", 12345)
	glog.ErrorDepth(1, "This is error message", 12345)
	glog.Fatal("This is fatal message")
	glog.Fatalf("This is fatal message: %v", 12345)
	glog.FatalDepth(1, "This is fatal message", 12345)
}

然后就是執(zhí)行代碼:

// 1.創(chuàng)建 log 文件夾,必須先創(chuàng)建,否則無法以文件形式輸出日志
mkdir log
// 2.將日志寫入到 log 文件夾下
go run main.go -log_dir=log -alsologtostderr
// log_dir:用來指定日志文件夾名
// alsologtostderr:表示既在標準窗口輸出也在文件中記錄

 記錄日志的其他配置項簡介:

  • -stderrthreshold=ERROR    達到或高于此嚴重程度的日志事件被記錄為標準錯誤以及文件。
  • -log_backtrace_at=""     設置保存一般日志的文件和行號,例如:-log_backtrace_at = gopherflakes.go:234,默認堆棧跟蹤都會寫入 Info 日志,文件名的后綴可以不為 .go。
  • -v=0    在指定級別上啟用 v 級日志記錄。
  • -vmodule=""    通過數(shù)字指定文件的記錄日志級別,可以同時配置多個文件的不同級別,用‘,’分隔。例如:-vmodule=recordio=2,file=1,gfs*=3,最后一個代表所有以‘gfs’開頭的文件記錄 3 級以下的日志。文件名的后綴必須為 .go,且可省略。

下面看下 Warning 級別的日志文件記錄的內(nèi)容:

1.2 vmodule 配置

vmodule 參數(shù)通過 -v=int 來自由配置輸出級別,int 代表級別的數(shù)字,默認為 0。如下示例:

package main
import (
	"flag"
	"github.com/golang/glog"
)
func main() {
	// 用于解析命令行中 - 橫線后邊的參數(shù)和值,如下示例中的:-log_dir=log -alsologtostderr
	// go run main.go -log_dir=log -alsologtostderr
	flag.Parse()
	// defer() 退出前執(zhí)行,清空緩存區(qū),將日志寫入文件
	defer glog.Flush()
	glog.V(0).Info("LEVEL 0 message") // 使用日志級別 0
	glog.V(3).Info("LEVEL 3 message") // 使用日志級別 3
	glog.V(4).Info("LEVEL 4 message") // 使用日志級別 4
	glog.V(5).Info("LEVEL 5 message") // 使用日志級別 5
	glog.V(8).Info("LEVEL 8 message") // 使用日志級別 8
}

如下測試結果,當不加 -v 配置項時,只輸出了默認級別為 0 的日志,當配置為 4 時,輸出 <=4 級別的日志:

1.3 vmodule 多文件配置不同的日志級別

通過該功能,可以對指定模塊采用不同日志級別的輸出,可有效提升調試效率

main.go 文件內(nèi)容:

package main
import (
	"flag"
	"github.com/golang/glog"
)
func main() {
	// 用于解析命令行中 - 橫線后邊的參數(shù)和值,如下示例中的:-log_dir=log -alsologtostderr
	// go run main.go -log_dir=log -alsologtostderr
	flag.Parse()
	// defer() 退出前執(zhí)行,清空緩存區(qū),將日志寫入文件
	defer glog.Flush()
	bar()
	bar2()
	glog.V(0).Info("LEVEL 0 message") // 使用日志級別 3
	glog.V(3).Info("LEVEL 3 message") // 使用日志級別 3
	glog.V(4).Info("LEVEL 4 message") // 使用日志級別 4
	glog.V(5).Info("LEVEL 5 message") // 使用日志級別 5
	glog.V(8).Info("LEVEL 8 message") // 使用日志級別 8
}

bar.go、bar2.go 文件內(nèi)容:

package main
import "github.com/golang/glog"
func bar() {
	glog.V(3).Info("LEVEL 3: level 3 message in bar.go")
	glog.V(4).Info("LEVEL 4: level 4 message in bar.go")
}
package main
import "github.com/golang/glog"
func bar2() {
	glog.V(4).Info("LEVEL 4: level 4 message in bar2.go")
}

如下運行語句,相關的三個文件都需要列出,全局配置為 -v=3,bar.go 文件中配置為 3 級,bar2.go 文件配置為 4 級,多文件間用‘,’分隔

go run main.go bar.go bar2.go -log_dir=log -alsologtostderr -v=3 -vmodule=bar=3,bar2=4

如下圖為輸出結果,bar.go 文件中大于 3 級的日志未輸出,main.go 中 3 級及以下的日志輸出:

對于文件名還可以使用通配符 *,如下測試:

go run main.go bar.go bar2.go -log_dir=log -alsologtostderr -v=3 -vmodule=bar*=4

1.4 traceLocation 功能(log_backtrace_at 參數(shù)配置)

 traceLocation 的命令格式為-log_backtrace_at=bar.go:6(文件全名:行號),當運行到指定代碼處時,將把該代碼的棧信息打印出來。

 如下語句運行代碼,在文件 bar.go 中的第 6 行,輸出棧信息:

go run main.go bar.go bar2.go -log_dir=log -alsologtostderr -v=3 -vmodule=bar=3,bar2=4 -log_backtrace_at=bar.go:6

1.5 日志格式簡介

從前邊幾節(jié)中可知,日志默認的格式為:<header>] <message>,日志頭信息和詳細信息通過中括號 ] 來分隔。

header 的默認格式:Lmmdd hh:mm:ss.uuuuuu threadid file:line。其中開頭的字母 L 代表的是日志級別 level,如下對應關系:

I -> INFO
W -> WARNING
E -> ERROR
F -> FATAL

threadid 是進程 PID,即 os.Getpid() 的調用結果。

到此這篇關于詳解Golang中日志庫glog的使用的文章就介紹到這了,更多相關Go日志庫glog內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 利用Golang實現(xiàn)TCP連接的雙向拷貝詳解

    利用Golang實現(xiàn)TCP連接的雙向拷貝詳解

    公司中遇到了一個使用golang編寫的agent程序,所以這篇文章主要給大家介紹了關于利用Go如何實現(xiàn)TCP連接的雙向拷貝的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考,下面隨著小編來一起看看吧。
    2017-09-09
  • Go中gin框架的*gin.Context參數(shù)常見實用方法

    Go中gin框架的*gin.Context參數(shù)常見實用方法

    *gin.Context是處理HTTP請求的核心,ctx代表"context"(上下文),它包含了處理請求所需的所有信息和方法,例如請求數(shù)據(jù)、響應構建器、路由參數(shù)等,這篇文章主要介紹了Go中gin框架的*gin.Context參數(shù)常見實用方法,需要的朋友可以參考下
    2024-07-07
  • 淺析Go語言容器之數(shù)組和切片的使用

    淺析Go語言容器之數(shù)組和切片的使用

    在?Java?的核心庫中,集合框架可謂鼎鼎大名:Array?、List、Set等等,隨便拎一個出來都值得開發(fā)者好好學習如何使用甚至是背后的設計源碼。雖然Go語言沒有如此豐富的容器類型,但也有一些基本的容器供開發(fā)者使用,接下來讓我們認識一下這些容器類型吧
    2022-11-11
  • Go 微服務開發(fā)框架DMicro設計思路詳解

    Go 微服務開發(fā)框架DMicro設計思路詳解

    這篇文章主要為大家介紹了Go 微服務開發(fā)框架DMicro設計思路詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • Go unsafe 包的使用詳解

    Go unsafe 包的使用詳解

    這篇文章主要介紹了Go unsafe 包的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • Go語言并發(fā)編程 sync.Once

    Go語言并發(fā)編程 sync.Once

    這篇文章要介紹的是Go語言并發(fā)編程 sync.Once,sync.Once用于保證某個動作只被執(zhí)行一次,可用于單例模式中,下面文章我們來介紹一下它的使用方法,需要的朋友可以參考一下
    2021-10-10
  • Go語言Grpc?Stream的實現(xiàn)

    Go語言Grpc?Stream的實現(xiàn)

    本文主要介紹了Go語言Grpc?Stream的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • go語言使用中提示%!(NOVERB)的解決方案

    go語言使用中提示%!(NOVERB)的解決方案

    o語言的設計目標是提供一種簡單易用的編程語言,同時保持高效性和可擴展性,它支持垃圾回收機制,具有強大的并發(fā)編程能力,可以輕松處理大規(guī)模的并發(fā)任務,Go語言還擁有豐富的標準庫和活躍的開發(fā)社區(qū),使得開發(fā)者能夠快速構建出高質量的應用程序,需要的朋友可以參考下
    2023-10-10
  • golang中time包之時間間隔格式化和秒、毫秒、納秒等時間戳格式輸出的方法實例

    golang中time包之時間間隔格式化和秒、毫秒、納秒等時間戳格式輸出的方法實例

    時間和日期是我們編程中經(jīng)常會用到的,下面這篇文章主要給大家介紹了關于golang中time包之時間間隔格式化和秒、毫秒、納秒等時間戳格式輸出的方法實例,需要的朋友可以參考下
    2022-08-08
  • Golang中的panic之避免和處理程序中的異常情況

    Golang中的panic之避免和處理程序中的異常情況

    Golang中的panic是一種異常處理機制,可以在程序出現(xiàn)異常情況時終止程序并打印錯誤信息。為了避免panic對程序的影響,開發(fā)者可以采用一系列技巧,如defer+recover、編寫可重入的代碼、使用錯誤返回值等。這些技巧可以幫助開發(fā)者優(yōu)雅地處理程序中的異常情況
    2023-04-04

最新評論