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

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

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

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

01 、介紹

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

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

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

02、log/slog 使用方式

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

日志級別

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

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

輸出結果:TLY28資訊網——每日最新資訊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 的輸出結果非常相似,只是在日志時間和日志消息之間多了日志級別。TLY28資訊網——每日最新資訊28at.com

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

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

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

輸出結果:TLY28資訊網——每日最新資訊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 個數字,我們可以定義其他日志級別。TLY28資訊網——每日最新資訊28at.com

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

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

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

鍵值對

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

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

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

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

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

Logger 修改輸出日志格式

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

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

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

輸出結果:TLY28資訊網——每日最新資訊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 對象。TLY28資訊網——每日最新資訊28at.com

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

03 、總結

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

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

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

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

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

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

標簽:
  • 熱門焦點
  • 十個可以手動編寫的 JavaScript 數組 API

    JavaScript 中有很多API,使用得當,會很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對它們進行一次小總結。現在開始吧。1.forEach()forEach()用于遍歷數組接收一參
  • 十個簡單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強大而靈活的功能,用于修改或增強函數或類的行為。裝飾器本質上是一個函數,它接受另一個函數或類作為參數,并返回一個新的函數或類。它們通常用
  • 使用Webdriver-manager解決瀏覽器與驅動不匹配所帶來自動化無法執行的問題

    1、前言在我們使用 Selenium 進行 UI 自動化測試時,常常會因為瀏覽器驅動與瀏覽器版本不匹配,而導致自動化測試無法執行,需要手動去下載對應的驅動版本,并替換原有的驅動,可能還
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • 當家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己“當家”的盒馬,開始加速謀生了。據盒馬官微消息,盒馬計劃今年開放生鮮供應鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經與
  • 微博大門常打開,迎接海外畫師漂洋東渡

    作者:互聯網那些事“起猛了,我能看得懂日語了”。“為什么日本人說話我能聽懂?”“中文不像中文,日語不像日語,但是我竟然看懂了”…&hell
  • 華為Mate 60系列用上可變靈動島:正式版體驗將會更出色

    這段時間以來,關于華為新旗艦的爆料日漸密集。據此前多方爆料,今年華為將開始恢復一年雙旗艦戰略,除上半年推出的P60系列外,往年下半年的Mate系列也將
  • 2299元起!iQOO Pad開啟預售:性能最強天璣平板

    5月23日,iQOO如期舉行了新品發布會,除了首發安卓最強旗艦處理器的iQOO Neo8系列新機外,還在發布會上推出了旗下首款平板電腦——iQOO Pad,其搭載了天璣
  • 最薄的14英寸游戲筆記本電腦 Alienware X14已可以購買

    2022年1月份在國際消費電子展(CES2022)上首次亮相的Alienware新品——Alienware X14現在已經可以購買了,這款筆記本電腦被譽為世界上最薄的 14 英寸游戲筆
Top 主站蜘蛛池模板: 怀宁县| 环江| 拉萨市| 原平市| 巧家县| 明光市| 大田县| 余江县| 永新县| 昂仁县| 肇东市| 松潘县| 泰顺县| 甘孜县| 颍上县| 吴忠市| 金秀| 永定县| 子长县| 玛多县| 崇阳县| 阿鲁科尔沁旗| 青河县| 鞍山市| 锡林郭勒盟| 永州市| 大新县| 清徐县| 乐亭县| 榆树市| 秦皇岛市| 胶州市| 鹿泉市| 顺平县| 彩票| 平果县| 醴陵市| 迁安市| 红安县| 克东县| 皋兰县|