AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

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

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

01 、介紹

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

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

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

02、log/slog 使用方式

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

日志級別

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

示例代碼:OpL28資訊網——每日最新資訊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")}

輸出結果:OpL28資訊網——每日最新資訊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

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

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

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

示例代碼:OpL28資訊網——每日最新資訊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")}

輸出結果:OpL28資訊網——每日最新資訊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

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

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

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

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

鍵值對

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

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

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

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

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

Logger 修改輸出日志格式

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

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

示例代碼:OpL28資訊網——每日最新資訊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)}

輸出結果:OpL28資訊網——每日最新資訊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}

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

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

03 、總結

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

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

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

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

上一篇: 希爾排序:優(yōu)化插入排序的精妙算法

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

標簽:
  • 熱門焦點
  • MIX Fold3包裝盒泄露 新機本月登場

    小米的全新折疊屏旗艦MIX Fold3將于本月發(fā)布,近日該機的真機包裝盒在網上泄露。從圖上來看,新的MIX Fold3包裝盒在外觀設計方面延續(xù)了之前的方案,變化不大,這也是目前小米旗艦
  • 分布式系統(tǒng)中的CAP理論,面試必問,你理解了嘛?

    對于剛剛接觸分布式系統(tǒng)的小伙伴們來說,一提起分布式系統(tǒng),就感覺高大上,深不可測。而且看了很多書和視頻還是一臉懵逼。這篇文章主要使用大白話的方式,帶你理解一下分布式系統(tǒng)
  • Flowable工作流引擎的科普與實踐

    一.引言當我們在日常工作和業(yè)務中需要進行各種審批流程時,可能會面臨一系列技術和業(yè)務上的挑戰(zhàn)。手動處理這些審批流程可能會導致開發(fā)成本的增加以及業(yè)務復雜度的上升。在這
  • 量化指標是與非:挽救被量化指標扼殺的技術團隊

    作者 | 劉新翠整理 | 徐杰承本文整理自快狗打車技術總監(jiān)劉新翠在WOT2023大會上的主題分享,更多精彩內容及現(xiàn)場PPT,請關注51CTO技術棧公眾號,發(fā)消息【WOT2023PPT】即可直接領取
  • JavaScript學習 -AES加密算法

    引言在當今數(shù)字化時代,前端應用程序扮演著重要角色,用戶的敏感數(shù)據經常在前端進行加密和解密操作。然而,這樣的操作在網絡傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數(shù)據
  • 為什么你不應該使用Div作為可點擊元素

    按鈕是為任何網絡應用程序提供交互性的最常見方式。但我們經常傾向于使用其他HTML元素,如 div span 等作為 clickable 元素。但通過這樣做,我們錯過了許多內置瀏覽器的功能。
  • 馮提莫簽約抖音公會 前“斗魚一姐”消失在直播間

    來源:直播觀察提起“馮提莫”這個名字,很多網友或許聽過,但應該不記得她是哪位主播了。其實,作為曾經的“斗魚一姐”,馮提莫在游戲直播的年代影響力不輸于現(xiàn)
  • 三星折疊屏手機去年銷售近1000萬臺 今年目標定為1500萬

    7月29日消息,三星率先發(fā)力可折疊手機市場,在全球市場已經取得了非常亮眼的成績,接下來會進一步鞏固和擴大這一優(yōu)勢。三星在推出Galaxy Z Flip5和Galax
  • OPPO K11樣張首曝:千元機影像“卷”得真不錯!

    一直以來,OPPO K系列機型都保持著較為均衡的產品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
Top