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

Golang結(jié)構(gòu)化日志包log/slog的使用詳解

 更新時間:2023年09月08日 08:22:01   作者:路多辛  
官方提供的用于打印日志的包是標(biāo)準(zhǔn)庫中的 log 包,該包雖然被廣泛使用,但是缺點也很多,所以Go 1.21新增的 log/slog 完美解決了以上問題,下面我們就來看看log/slog包的使用吧

前言

在 Go 1.21以前,官方提供的用于打印日志的包是標(biāo)準(zhǔn)庫中的 log 包,該包雖然被廣泛使用,但是缺點也很多,Go 社區(qū)要求改進(jìn)的聲音不斷,主要有以下缺點:

log 包只提供了基本的日志記錄功能,功能相對太過簡單,缺乏很多常用功能,例如日志級別控制、自定義日志格式等,這就導(dǎo)致在很多應(yīng)用程序中無法滿足日志處理的需求。

不能自定義輸出目標(biāo),log 包默認(rèn)將日志輸出到標(biāo)準(zhǔn)錯誤(stderr)。如果需要將日志輸出到其他地方,例如文件、隊列或日志存儲系統(tǒng)等,就需要自己實現(xiàn)或者使用第三方日志包來滿足這些需求。

Go 1.21新增的 log/slog 完美解決了以上問題,并且?guī)砹撕芏嗥渌軐嵱玫奶匦浴?/p>

log/slog 包初體驗

log/slog 包提供結(jié)構(gòu)化的日志記錄功能,其中的日志記錄包括時間、日志級別、消息和以鍵值對表示的各種其他屬性。

log/slog 包定義了一個 Logger 結(jié)構(gòu)體,這個結(jié)構(gòu)體提供了幾個方法(如 Logger.Info、Logger.Warn、Logger.Error等)用于打印不同級別的日志。每個 Logger 都與一個 Handler 相關(guān)聯(lián),Logger 的打印日志方法根據(jù)參數(shù)創(chuàng)建一條日志并傳遞給 Handler,由 Handler 來決定如何處理這條日志。log/slog 包提供的打印日志的函數(shù)例如 Info、Warn、Error 等,是通過調(diào)用默認(rèn) Logger 中的相關(guān)方法來實現(xiàn)的。

日志記錄由時間、級別、消息和一組鍵值對組成,其中鍵是字符串,值可以是任何類型??磦€簡單的示例:

package main
import (
    "log/slog"
)
func main() {
    slog.Info("hello", "count", 3)
}

使用 slog.Info 函數(shù)創(chuàng)建了一條記錄,包括打印時間、日志級別 Info、消息為“hello”和一個鍵為“count”值為 3 的鍵值對。運行結(jié)果如下:

2023/09/07 22:00:33 INFO hello count=3

Info 函數(shù)是通過調(diào)用默認(rèn) Logger 的 相關(guān)方法實現(xiàn)的,看一下 Info 函數(shù)的定義:

// Info calls Logger.Info on the default logger.
func Info(msg string, args ...any) {
    Default().log(context.Background(), LevelInfo, msg, args...)
}

可以看出調(diào)用了使用 Default 函數(shù)返回的 Logger 對象中的 log 方法實現(xiàn)的,Default 函數(shù)的定義如下:

func Default() *Logger { return defaultLogger.Load().(*Logger) }

defaultLogger 是 atomic.Value 類型,存儲了默認(rèn)的 Logger 類型,這個默認(rèn)的 Logger 類型是通過 init 函數(shù)存儲進(jìn)去的,init 函數(shù)的定義如下:

func ?() {
    defaultLogger.Store(New(newDefaultHandler(loginternal.DefaultOutput)))
}

默認(rèn)的 Logger 打印日志的函數(shù)還有 Debug、Warn 和 Error。除了這幾個很方便使用的函數(shù)外,還有一個 Log 函數(shù),可以接受一個日志級別參數(shù)??磦€簡單的示例:

package main
import (
    "context"
    "log/slog"
)
func main() {
    slog.Log(context.Background(), slog.LevelInfo, "hello", "count", 3)
}

運行看下效果:

2023/09/07 22:09:58 INFO hello count=3、

可以看出和 直接調(diào)用 Info 函數(shù)效果是一樣的。

Logger 類型

看下 Logger 類型的定義,如下:

type Logger struct {
    handler Handler // for structured logging
}

提供了 Log、Debug、Info、Warn 和 Error 這幾個打印日志的方法。

到此這篇關(guān)于Golang結(jié)構(gòu)化日志包log/slog的使用詳解的文章就介紹到這了,更多相關(guān)go log/slog包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang結(jié)構(gòu)化日志slog的用法簡介

    golang結(jié)構(gòu)化日志slog的用法簡介

    日志是任何軟件的重要組成部分,Go?提供了一個內(nèi)置日志包(slog),在本文中,小編將簡單介紹一下slog包的功能以及如何在?Go?應(yīng)用程序中使用它,感興趣的可以了解下
    2023-09-09
  • go get 和 go install 對比介紹

    go get 和 go install 對比介紹

    go install和go get都是Go語言的工具命令,但它們之間有一些區(qū)別。go get:用于從遠(yuǎn)程代碼存儲庫(如 GitHub)中下載或更新Go代碼包。go install:用于編譯并安裝 Go 代碼包,本文go get和go install對比介紹的非常詳細(xì),需要的朋友可以參考一下
    2023-04-04
  • Golang使用DuckDB查詢Parquet文件數(shù)據(jù)的操作代碼

    Golang使用DuckDB查詢Parquet文件數(shù)據(jù)的操作代碼

    本文介紹DuckDB查詢Parquet文件的典型應(yīng)用場景,掌握DuckDB會讓你的產(chǎn)品分析能力更強,相反系統(tǒng)運營成本相對較低,為了示例完整,我也提供了如何使用Python導(dǎo)出MongoDB數(shù)據(jù),需要的朋友可以參考下
    2025-01-01
  • go語言中[]*int和*[]int的具體使用

    go語言中[]*int和*[]int的具體使用

    本文主要介紹了go語言中[]*int和*[]int的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Go語言結(jié)合Gin框架快速實現(xiàn)分頁查詢接口

    Go語言結(jié)合Gin框架快速實現(xiàn)分頁查詢接口

    在開發(fā)?Web?應(yīng)用時,分頁查詢?是非常常見的需求,在?Go?語言中,我們可以結(jié)合?GORM?+?Gin?框架,快速實現(xiàn)分頁查詢接口,下面我們來看看具體實現(xiàn)方法吧
    2025-08-08
  • VScode如何運行Go程序

    VScode如何運行Go程序

    文章詳細(xì)介紹了如何配置Go開發(fā)環(huán)境,包括安裝Go、配置GOPROXY、安裝VSCode插件(如Go、CodeRunner)、創(chuàng)建項目、安裝代碼提示工具以及常用快捷鍵等
    2026-03-03
  • 初識Golang?Mutex互斥鎖的使用

    初識Golang?Mutex互斥鎖的使用

    在學(xué)習(xí)操作系統(tǒng)的時候,我們應(yīng)該都學(xué)習(xí)過臨界區(qū)、互斥鎖這些概念,用于在并發(fā)環(huán)境下保證狀態(tài)的正確性。在?Go語言?里面互斥鎖是?sync.Mutex?,我們本篇文章就來學(xué)習(xí)下為什么要使用互斥鎖、如何使用互斥鎖,以及使用時的常見問題
    2022-10-10
  • Golang使用gin框架實現(xiàn)一個完整的聊天室功能

    Golang使用gin框架實現(xiàn)一個完整的聊天室功能

    由于我們項目的需要,我就研究了一下關(guān)于websocket的相關(guān)內(nèi)容,去實現(xiàn)一個聊天室的功能,經(jīng)過幾天的探索,現(xiàn)在使用Gin框架實現(xiàn)了一個完整的聊天室+消息實時通知系統(tǒng),感興趣的小伙伴歡迎閱讀本文
    2023-08-08
  • Golang中關(guān)于defer的盲區(qū)梳理

    Golang中關(guān)于defer的盲區(qū)梳理

    關(guān)于Go中的defer,是做什么的?執(zhí)行順序是怎么樣的?相信學(xué)過Go語言的同學(xué),已經(jīng)不在陌生,今天就來講講其中需要掌握的幾個知識點,希望對大家有所幫助
    2023-03-03
  • Windows下CMD執(zhí)行Go出現(xiàn)中文亂碼的解決方法

    Windows下CMD執(zhí)行Go出現(xiàn)中文亂碼的解決方法

    本文主要介紹了Windows下CMD執(zhí)行Go出現(xiàn)中文亂碼的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評論

元氏县| 米易县| 兴山县| 洮南市| 德兴市| 乌兰浩特市| 夏津县| 梁平县| 西乌珠穆沁旗| 张家界市| 赤水市| 济宁市| 黄浦区| 石楼县| 旬邑县| 永泰县| 花垣县| 军事| 昌宁县| 林西县| 新乐市| 万载县| 竹溪县| 涞水县| 鸡东县| 泗洪县| 塔河县| 铁岭县| 镇宁| 大洼县| 扬州市| 牡丹江市| 广东省| 马公市| 赤壁市| 昭平县| 习水县| 当阳市| 黑龙江省| 文安县| 都江堰市|