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

Go?1.21.0?新增結構化日志記錄標準庫log/slog使用詳解

 更新時間:2023年11月30日 10:43:46   作者:Golang語言開發(fā)棧  
這篇文章主要為大家介紹了Go?1.21.0?新增結構化日志記錄標準庫log/slog使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

介紹

在 Go 語言項目開發(fā)中,我們通常需要查看日志來調(diào)試程序,所以日志的快捷搜索和過濾就會至關重要。

因為 Go 標準庫中的 log,它不是結構化日志格式,使用上并不方便,所以在 Go 1.21.0 中,Go 標準庫新增結構化日志記錄包 log/slog,它支持鍵值對格式。

本文我們介紹 log/slog 的使用方式。

log/slog 使用方式

log/slog 的默認 logger 使用的是 log 的默認 logger,新增日志包 log/slog 和原始日志包 log 協(xié)同工作,使 log/slog 更易上手。

日志級別

log/slog 日志級別包括 Info、Debug、Warn 和 Error,log/slog 為它們分別提供了函數(shù)。

示例代碼:

func main() {
 log.Println("This is log")
 slog.Debug("This is Debug Level")
 slog.Info("This is Info Level")
 slog.Warn("This is Warn Level")
 slog.Error("This is Error Level")
}

輸出結果:

2023/10/06 11:18:04 This is log
2023/10/06 11:18:04 INFO This is Info Level
2023/10/06 11:18:04 WARN This is Warn Level
2023/10/06 11:18:04 ERROR This is Error Level

閱讀上面這段代碼,我們可以發(fā)現(xiàn) log/slog 的輸出結果和 log 的輸出結果非常相似,只是在日志時間和日志消息之間多了日志級別。

因為 log/slog 的默認 logger 使用的是 log 的默認 logger。

log 函數(shù)

除了上述 4 個不同日志級別的函數(shù)之外,還有一個函數(shù) log,我們可以使用 log 函數(shù)替代上述 4 個函數(shù)。

示例代碼:

func main() {
 slog.Log(context.Background(), -4, "This is Debug Level")
 slog.Log(context.Background(), 0, "This is Info Level")
 slog.Log(context.Background(), 4, "This is Warn Level")
 slog.Log(context.Background(), 8, "This is Error Level")
}

輸出結果:

2023/10/06 11:41:47 INFO This is Info Level
2023/10/06 11:41:47 WARN This is Warn Level
2023/10/06 11:41:47 ERROR This is Error Level

閱讀上面這段代碼,我們可以發(fā)現(xiàn),log 函數(shù)通過參數(shù)定義日志級別,數(shù)字越大,級別越嚴重,并且不同級別之間,預留 4 個數(shù)字,我們可以定義其他日志級別。

log 函數(shù)與 4 個分別代表不同級別的函數(shù)之間,還有另外一個區(qū)別,它的第一參數(shù)是上下文,其實 4 個分別代表不同級別的函數(shù)也對應 4 個支持第一個參數(shù)是上下文的函數(shù),分別是 InfoContext()、DebugContext()、WarnContext() 和 ErrorContext

細心的讀者朋友們可能發(fā)現(xiàn)了,為什么輸出結果沒有 Debug 級別的日志輸出?

因為  log/slog 的默認 logger 的默認日志級別是 Info,如果我們想要使用日志級別 Debug,可以新建 logger,并把默認日志級別設置為 Debug。

鍵值對

前面我們已經(jīng)說過 log/slog 支持鍵值對格式,但是上述示例代碼中并沒有體現(xiàn),接下來,我們以 Info 函數(shù)為例,介紹 log/slog 怎么輸出鍵值對格式。

func main() {
 slog.Info("This is Info Level", "uid", 1001)
}

輸出結果:

2023/10/06 11:58:07 INFO This is Info Level uid=1001

閱讀上面這段代碼,我們發(fā)現(xiàn) Info 函數(shù)中,在日志消息之后新增兩個參數(shù),分別是 uid 和 1001,它們就是鍵值對的 key 和 value。

Logger 修改輸出日志格式

因為 log/slog 默認使用 log 的默認 logger,所以輸出格式就是我們上面看到的文本格式。

我們可以使用內(nèi)置的 Handler NewTextHandler 和 NewJSONHandler創(chuàng)建新的 Logger,來輸出新文本格式和 json 格式。

示例代碼:

func main() {
 logger := slog.New(slog.NewTextHandler(os.Stdout, nil))
 logger.Info("This is a new text Info Level", "uid", 1002)
 jsonLogger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
 jsonLogger.Info("This is a json format Info Level", "uid", 1003)
}

輸出結果:

time=2023-10-06T12:19:21.676+08:00 level=INFO msg="This is a new text Info Level" uid=1002
{"time":"2023-10-06T12:19:21.676846+08:00","level":"INFO","msg":"This is a json format Info Level","uid":1003}

閱讀上面這段代碼,我們可以發(fā)現(xiàn)通過內(nèi)置 Handler 創(chuàng)建新的 Logger,輸出新的日志格式,其中 NewTextHandler 輸出的所有內(nèi)容都是鍵值對格式,NewJSONHandler 輸出一個 json 對象。

此外,我們還可以自定義 Handler,通過實現(xiàn) slog.Handler 接口,生成特定的輸出日志格式或者 wrap 另一個 Handler 來豐富其功能。

總結

本文我們介紹 log/slog 的使用方式,包括日志級別和輸出日志格式。

限于篇幅,還有一些進階用法沒有介紹,比如 LogAttrs 函數(shù),以及 NewTextHandler 和 NewJSONHandler 的方法。

感興趣的讀者朋友們,可以閱讀標準庫 log/slog[1] 文檔了解更多。

參考資料

標準庫 https://pkg.go.dev/log/slog

以上就是Go 1.21.0 新增結構化日志記錄標準庫log/slog使用詳解的詳細內(nèi)容,更多關于Go日志記錄 log/slog庫的資料請關注腳本之家其它相關文章!

相關文章

  • Beego中ORM操作各類數(shù)據(jù)庫連接方式詳細示例

    Beego中ORM操作各類數(shù)據(jù)庫連接方式詳細示例

    這篇文章主要為大家介紹了Beego中ORM操作各類數(shù)據(jù)庫連接方式詳細示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • golang小游戲開發(fā)實戰(zhàn)之飛翔的小鳥

    golang小游戲開發(fā)實戰(zhàn)之飛翔的小鳥

    這篇文章主要給大家介紹了關于golang小游戲開發(fā)實戰(zhàn)之飛翔的小鳥的相關資料,,本文可以帶你你從零開始,一步一步的開發(fā)出這款小游戲,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-03-03
  • Golang交叉編譯之跨平臺編譯使用詳解

    Golang交叉編譯之跨平臺編譯使用詳解

    這篇文章主要為大家介紹了Golang交叉編譯之跨平臺編譯使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • Air實現(xiàn)Go程序?qū)崟r熱重載使用過程解析示例

    Air實現(xiàn)Go程序?qū)崟r熱重載使用過程解析示例

    這篇文章主要為大家介紹了Air實現(xiàn)Go程序?qū)崟r熱重載使用過程解析示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • 一文帶你熟悉Go語言中的for循環(huán)

    一文帶你熟悉Go語言中的for循環(huán)

    這篇文章主要和大家分享一下Go語言中for循環(huán)的定義與使用,文中的示例代碼講解詳細,對我們學習Go語言有一定的幫助,需要的可以參考一下
    2022-11-11
  • go protobuf?詳解

    go protobuf?詳解

    Protobuf是Protocol Buffers的簡稱,它是Google公司開發(fā)的一種數(shù)據(jù)描述語言,是一種輕便高效的結構化數(shù)據(jù)存儲格式,可以用于結構化數(shù)據(jù)串行化,或者說序列化,這篇文章主要介紹了protobuf?詳解,需要的朋友可以參考下
    2024-01-01
  • goframe重寫FastAdmin后端實現(xiàn)實例詳解

    goframe重寫FastAdmin后端實現(xiàn)實例詳解

    這篇文章主要為大家介紹了goframe重寫FastAdmin后端實現(xiàn)實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Go語言開發(fā)redis封裝及簡單使用詳解

    Go語言開發(fā)redis封裝及簡單使用詳解

    這篇文章主要為大家介紹了Go語言開發(fā)redis的封裝及簡單使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2021-11-11
  • 使用 Go 管理版本的方法示例

    使用 Go 管理版本的方法示例

    這篇文章主要介紹了使用 Go 管理版本的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • GO語言導入自己寫的包(同級目錄和不同目錄)

    GO語言導入自己寫的包(同級目錄和不同目錄)

    本文介紹了如何在Go語言項目中導入同級目錄和不同目錄的包,詳細解釋了創(chuàng)建文件結構、編寫主函數(shù)、同級目錄和不同目錄方法的調(diào)用,適合初學者參考,幫助理解Go項目的基本構建和包管理
    2024-09-09

最新評論

昌都县| 宜川县| 炎陵县| 军事| 淅川县| 华宁县| 乌拉特前旗| 大关县| 桃园县| 雷波县| 水富县| 永顺县| 定陶县| 邵阳市| 台前县| 安图县| 阿勒泰市| 施甸县| 古丈县| 四平市| 奎屯市| 巴中市| 绥滨县| 龙胜| 竹溪县| 阿巴嘎旗| 铜川市| 泰州市| 孝义市| 随州市| 高雄市| 武汉市| 洪洞县| 昭觉县| 和龙市| 兰考县| 巴马| 洪江市| 台南县| 沅陵县| 广元市|