日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Go 1.21.0 中新增的結構化日志記錄標準庫 log/slog 詳解

來源: 責編: 時間:2023-10-08 07:06:18 321觀看
導讀01 、介紹在 Go 語言項目開發中,我們通常需要查看日志來調試程序,所以日志的快捷搜索和過濾就會至關重要。因為 Go 標準庫中的 log,它不是結構化日志格式,使用上并不方便,所以在 Go 1.21.0 中,Go 標準庫新增結構化日志記錄

01 、介紹

在 Go 語言項目開發中,我們通常需要查看日志來調試程序,所以日志的快捷搜索和過濾就會至關重要。e4S28資訊網——每日最新資訊28at.com

因為 Go 標準庫中的 log,它不是結構化日志格式,使用上并不方便,所以在 Go 1.21.0 中,Go 標準庫新增結構化日志記錄包 log/slog,它支持鍵值對格式。e4S28資訊網——每日最新資訊28at.com

本文我們介紹 log/slog 的使用方式。e4S28資訊網——每日最新資訊28at.com

02、log/slog 使用方式

log/slog 的默認 logger 使用的是 log 的默認 logger,新增日志包 log/slog 和原始日志包 log 協同工作,使 log/slog 更易上手。e4S28資訊網——每日最新資訊28at.com

日志級別

log/slog 日志級別包括 Info、Debug、Warn 和 Error,log/slog 為它們分別提供了函數。e4S28資訊網——每日最新資訊28at.com

示例代碼:e4S28資訊網——每日最新資訊28at.com

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")}

輸出結果:e4S28資訊網——每日最新資訊28at.com

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

閱讀上面這段代碼,我們可以發現 log/slog 的輸出結果和 log 的輸出結果非常相似,只是在日志時間和日志消息之間多了日志級別。e4S28資訊網——每日最新資訊28at.com

因為 log/slog 的默認 logger 使用的是 log 的默認 logger。e4S28資訊網——每日最新資訊28at.com

除了上述 4 個不同日志級別的函數之外,還有一個函數 log,我們可以使用 log 函數替代上述 4 個函數。e4S28資訊網——每日最新資訊28at.com

示例代碼:e4S28資訊網——每日最新資訊28at.com

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")}

輸出結果:e4S28資訊網——每日最新資訊28at.com

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

閱讀上面這段代碼,我們可以發現,log 函數通過參數定義日志級別,數字越大,級別越嚴重,并且不同級別之間,預留 4 個數字,我們可以定義其他日志級別。e4S28資訊網——每日最新資訊28at.com

log 函數與 4 個分別代表不同級別的函數之間,還有另外一個區別,它的第一參數是上下文,其實 4 個分別代表不同級別的函數也對應 4 個支持第一個參數是上下文的函數,分別是 InfoContext()、DebugContext()、WarnContext() 和 ErrorContext。e4S28資訊網——每日最新資訊28at.com

細心的讀者朋友們可能發現了,為什么輸出結果沒有 Debug 級別的日志輸出?e4S28資訊網——每日最新資訊28at.com

因為  log/slog 的默認 logger 的默認日志級別是 Info,如果我們想要使用日志級別 Debug,可以新建 logger,并把默認日志級別設置為 Debug。e4S28資訊網——每日最新資訊28at.com

鍵值對

前面我們已經說過 log/slog 支持鍵值對格式,但是上述示例代碼中并沒有體現,接下來,我們以 Info 函數為例,介紹 log/slog 怎么輸出鍵值對格式。e4S28資訊網——每日最新資訊28at.com

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

輸出結果:e4S28資訊網——每日最新資訊28at.com

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

閱讀上面這段代碼,我們發現 Info 函數中,在日志消息之后新增兩個參數,分別是 uid 和 1001,它們就是鍵值對的 key 和 value。e4S28資訊網——每日最新資訊28at.com

Logger 修改輸出日志格式

因為 log/slog 默認使用 log 的默認 logger,所以輸出格式就是我們上面看到的文本格式。e4S28資訊網——每日最新資訊28at.com

我們可以使用內置的 Handler NewTextHandler 和 NewJSONHandler創建新的 Logger,來輸出新文本格式和 json 格式。e4S28資訊網——每日最新資訊28at.com

示例代碼:e4S28資訊網——每日最新資訊28at.com

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)}

輸出結果:e4S28資訊網——每日最新資訊28at.com

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}

閱讀上面這段代碼,我們可以發現通過內置 Handler 創建新的 Logger,輸出新的日志格式,其中 NewTextHandler 輸出的所有內容都是鍵值對格式,NewJSONHandler 輸出一個 json 對象。e4S28資訊網——每日最新資訊28at.com

此外,我們還可以自定義 Handler,通過實現 slog.Handler 接口,生成特定的輸出日志格式或者 wrap 另一個 Handler 來豐富其功能。e4S28資訊網——每日最新資訊28at.com

03 、總結

本文我們介紹 log/slog 的使用方式,包括日志級別和輸出日志格式。e4S28資訊網——每日最新資訊28at.com

限于篇幅,還有一些進階用法沒有介紹,比如 LogAttrs 函數,以及 NewTextHandler 和 NewJSONHandler 的方法。e4S28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-12377-0.htmlGo 1.21.0 中新增的結構化日志記錄標準庫 log/slog 詳解

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 希爾排序:優化插入排序的精妙算法

下一篇: 網絡安全知識:使用USB驅動器進行社會工程

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 灵川县| 仁化县| 三江| 连山| 环江| 从化市| 上犹县| 博客| 衡东县| 历史| 辉南县| 叶城县| 龙游县| 花莲市| 建瓯市| 三亚市| 独山县| 游戏| 新建县| 南乐县| 道孚县| 神木县| 靖远县| 清苑县| 昌黎县| 谢通门县| 华阴市| 淅川县| 东台市| 昔阳县| 南木林县| 惠来县| 肇东市| 连南| 泸州市| 闽侯县| 龙里县| 武川县| 南川市| 赤城县| 漳平市|