最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解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ù)或配置文件來自定義日志輸出的行為。可以指定要記錄的日志級別、日志文件的路徑、是否同時輸出到標準錯誤流等。這使得 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ā)者更好地理解和調(diào)試代碼。

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

一、glog 詳細介紹

1.1 日志級別與測試

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

  • INFO:一般日志,可用于記錄程序運行狀態(tài);
  • WARNING:警告日志,記錄潛在的問題或錯誤;
  • ERROR:錯誤日志,記錄程序運行中一些可恢復的錯誤,可能導致程序功能受限或出現(xiàn)異常情況,但是不會導致系統(tǒng)崩潰;
  • FATAL:嚴重錯誤日志,程序遇到一個不可恢復的錯誤,在打印完日志后程序?qū)詣油顺觯?code>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
}

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

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

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

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

如下圖為輸出結(jié)果,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() 的調(diào)用結(jié)果。

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

相關文章

  • Golang實現(xiàn)可重入鎖的示例代碼

    Golang實現(xiàn)可重入鎖的示例代碼

    可重入鎖指的是同一個線程外層函數(shù)獲得鎖之后,內(nèi)層遞歸函數(shù)仍然能獲取該鎖的代碼,在同一個線程在外層方法獲取鎖的時候,在進入內(nèi)層方法會自動獲取鎖。本文將用Golang實現(xiàn)可重入鎖,需要的可以參考一下
    2022-05-05
  • Go Java算法之單詞規(guī)律示例詳解

    Go Java算法之單詞規(guī)律示例詳解

    這篇文章主要為大家介紹了Go Java算法之單詞規(guī)律示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • gorm+gin實現(xiàn)restful分頁接口的實踐

    gorm+gin實現(xiàn)restful分頁接口的實踐

    本文主要介紹了gorm+gin實現(xiàn)restful分頁接口的實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 分析Go錯誤處理優(yōu)化go?recover機制缺陷

    分析Go錯誤處理優(yōu)化go?recover機制缺陷

    這篇文章主要為大家介紹了分析Go錯誤處理優(yōu)化go?recover機制缺陷示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 關于go get 下載第三方包存儲路徑問題

    關于go get 下載第三方包存儲路徑問題

    這篇文章主要介紹了關于go get 下載第三方包存儲路徑問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Go 語言中的 http.FileSystem詳細解析

    Go 語言中的 http.FileSystem詳細解析

    在本文中,我們深入探討了 Go 語言中的 http.FileSystem 接口,并介紹了它的基本原理、使用方法以及實際應用場景,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Golang中使用不定數(shù)量空格分割字符串的方法

    Golang中使用不定數(shù)量空格分割字符串的方法

    有這樣一個使用空格分割字符串的場景,字符串中被分割的子串之間的空格數(shù)量不確定,有一個兩個或者多個空格,這種場景下,使用最容易想到的strings.Split函數(shù)就做不到了,本文接下來就介紹幾種行之有效的方法,需要的朋友可以參考下
    2023-07-07
  • go設置多個GOPATH的方式

    go設置多個GOPATH的方式

    這篇文章主要介紹了go設置多個GOPATH的方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • 淺談Go語言的error類型

    淺談Go語言的error類型

    這篇文章主要介紹了淺談Go語言的error類型,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go語言sync鎖與對象池的實現(xiàn)

    Go語言sync鎖與對象池的實現(xiàn)

    本文介紹了Go語言標準庫sync包提供的并發(fā)控制工具,主要包括互斥鎖(sync.Mutex)和讀寫鎖(sync.RWMutex)兩類同步機制,下面就來具體介紹一下這兩個的使用,感興趣的可以了解一下
    2025-08-08

最新評論

社会| 濉溪县| 延长县| 叶城县| 壤塘县| 将乐县| 湟中县| 中超| 长海县| 天门市| 赤壁市| 昭觉县| 石泉县| 镇江市| 阜宁县| 富锦市| 东乡| 大姚县| 香港| 兴隆县| 黔西| 江城| 贞丰县| 新兴县| 定远县| 三原县| 金阳县| 昆山市| 平谷区| 开封县| 育儿| 清丰县| 筠连县| 敖汉旗| 宜昌市| 汾西县| 古田县| 宜君县| 抚顺县| 青浦区| 海宁市|