成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go 1.21.0 中新增的結(jié)構(gòu)化日志記錄標(biāo)準(zhǔn)庫 log/slog 詳解

開發(fā) 前端
本文我們介紹 log/slog 的使用方式,包括日志級別和輸出日志格式。限于篇幅,還有一些進(jìn)階用法沒有介紹,比如 LogAttrs? 函數(shù),以及 NewTextHandler? 和 NewJSONHandler 的方法。

01 、介紹

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

因?yàn)?Go 標(biāo)準(zhǔn)庫中的 log,它不是結(jié)構(gòu)化日志格式,使用上并不方便,所以在 Go 1.21.0 中,Go 標(biāo)準(zhǔn)庫新增結(jié)構(gòu)化日志記錄包 log/slog,它支持鍵值對格式。

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

02、log/slog 使用方式

log/slog 的默認(rèn) logger 使用的是 log 的默認(rèn) 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")
}

輸出結(jié)果:

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 的輸出結(jié)果和 log 的輸出結(jié)果非常相似,只是在日志時間和日志消息之間多了日志級別。

因?yàn)?nbsp;log/slog 的默認(rèn) logger 使用的是 log 的默認(rèn) logger。

除了上述 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")
}

輸出結(jié)果:

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ù)字越大,級別越嚴(yán)重,并且不同級別之間,預(yù)留 4 個數(shù)字,我們可以定義其他日志級別。

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

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

因?yàn)?nbsp; log/slog 的默認(rèn) logger 的默認(rèn)日志級別是 Info,如果我們想要使用日志級別 Debug,可以新建 logger,并把默認(rèn)日志級別設(shè)置為 Debug。

鍵值對

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

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

輸出結(jié)果:

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

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

Logger 修改輸出日志格式

因?yàn)?nbsp;log/slog 默認(rèn)使用 log 的默認(rèn) 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)
}

輸出結(jié)果:

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,通過實(shí)現(xiàn) slog.Handler 接口,生成特定的輸出日志格式或者 wrap 另一個 Handler 來豐富其功能。

03 、總結(jié)

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

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

責(zé)任編輯:武曉燕 來源: Golang語言開發(fā)棧
相關(guān)推薦

2023-09-27 08:26:48

Go標(biāo)準(zhǔn)庫函數(shù)

2024-09-29 16:04:14

2024-10-08 10:57:04

2024-03-01 01:25:40

結(jié)構(gòu)化日志可讀性

2024-02-01 13:30:53

Go語言開發(fā)

2011-03-01 09:39:51

結(jié)構(gòu)化布線

2009-10-15 13:49:23

結(jié)構(gòu)化布線系統(tǒng)

2023-04-02 23:13:07

Go語言bufio

2021-12-12 08:37:18

結(jié)構(gòu)化數(shù)據(jù)非結(jié)構(gòu)化數(shù)據(jù)數(shù)據(jù)

2016-01-22 12:36:51

TAXII威脅情報(bào)安全威脅情報(bào)

2024-05-27 00:32:45

2009-10-15 11:46:36

結(jié)構(gòu)化綜合布線系統(tǒng)

2018-04-03 14:00:03

結(jié)構(gòu)化數(shù)據(jù)非結(jié)構(gòu)化數(shù)據(jù)數(shù)據(jù)庫

2019-07-13 15:00:17

結(jié)構(gòu)化SQLNOSQL數(shù)據(jù)庫

2010-01-13 13:20:08

VB.NET結(jié)構(gòu)化異常

2023-12-25 15:00:18

結(jié)構(gòu)化布線光纖

2012-02-08 15:54:05

ibmdw

2021-12-29 10:51:19

JavaSPL架構(gòu)

2011-03-01 13:59:43

結(jié)構(gòu)化

2017-05-16 21:31:03

結(jié)構(gòu)化數(shù)據(jù)新模式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 91免费高清 | 网站黄色在线 | 天天干狠狠操 | 毛片网在线观看 | 国产乱码久久久久久 | 免费视频一区二区 | 久久99蜜桃综合影院免费观看 | 9999视频| 中文字幕不卡在线观看 | 精品国产乱码久久久久久88av | 亚洲精品久久视频 | 免费黄色录像视频 | 久久久久国产一区二区三区不卡 | 久久午夜精品 | 欧美乱人伦视频 | 天天色图 | 精品国产乱码久久久久久久久 | 国产中文字幕在线 | 久久免费精品视频 | 久久久久国产一区二区三区四区 | 日韩精品一区二区三区 | 国产亚洲欧美另类一区二区三区 | 久久久久久黄 | 国产午夜精品久久久 | 草樱av| 国产欧美一级二级三级在线视频 | 高清视频一区 | 精品在线播放 | 欧美视频偷拍 | 北条麻妃一区二区三区在线视频 | 久久精品成人一区 | 欧美日韩亚洲国产 | 亚洲一区视频 | 久久久久亚洲精品 | 国产免费视频在线 | 日韩h | 国产日韩一区二区三区 | 亚洲欧美综合精品久久成人 | 亚洲精品一区二区在线观看 | 日韩三级在线观看 | 国产欧美精品一区 |