欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang結(jié)構(gòu)化日志log/slog包之slog.Record的用法簡介

 更新時間:2023年10月18日 08:48:39   作者:路多辛  
這篇文章主要為大家詳細(xì)介紹了golang結(jié)構(gòu)化日志log/slog包中slog.Record結(jié)構(gòu)體的使用方法和需要注意的點(diǎn),文中的示例代碼講解詳細(xì),需要的可以學(xué)習(xí)一下

上一篇文章講解了log/slog 包中的 LogValuer 和日志記錄函數(shù)的正確包裝方法,本文詳細(xì)講解一下 slog.Record 結(jié)構(gòu)體的使用方法和需要注意的點(diǎn)。

slog.Record

Record 類型用來保存日志事件的信息,定義如下:

type Record struct {
    Time time.Time
    Message string
    Level Level
    PC uintptr
    front [nAttrsInline]Attr
    nFront int
    back []Attr
}

有如下幾個方法:

func (r Record) Clone() Record,返回一個不共享狀態(tài)的副本,Record 和其克隆副本都可以被修改并且不會相互干擾。

func (r Record) NumAttrs() int,返回日志記錄中屬性的個數(shù)。

func (r Record) Attrs(f func(Attr) bool),使用函數(shù) f 作用于日志記錄中的每個屬性,如果 f 返回 false,則停止迭代。

func (r *Record) AddAttrs(attrs ...Attr),將給定的屬性追加到日志記錄的屬性列表中。

func (r *Record) Add(args ...any),將參數(shù)轉(zhuǎn)換為 Logger.Log 中描述的 Attrs,然后將Attrs 追加到日志記錄中的 Attrs 列表。

func (r Record) source() *Source,返回日志事件的 Source。

使用示例

可以使用 slog.NewRecord 函數(shù)創(chuàng)建一個 Record 對象,使用 Record 記錄日志的示例代碼如下:

package main
 
import (
    "context"
    "log/slog"
    "os"
    "time"
)
 
func main() {
    logger := slog.New(slog.NewTextHandler(os.Stdout, nil))
    r := slog.NewRecord(time.Now(), slog.LevelInfo, "test", 1)
    r.Add("title", "路多辛的博客")
    _ = logger.Handler().Handle(context.Background(), r)
}

運(yùn)行程序,輸出結(jié)果如下:

time=2023-10-17T21:01:12.041+08:00 level=INFO msg=test title=路多辛的博客

在日常的使用場景中,會有這么一種情況,首先創(chuàng)建一個基礎(chǔ)的 Record 對象,然后會使用不同的 Handler 來基于這個對象分別做不同的處理。這種場景下,需要先調(diào)用 Clone 方法克隆一份 Record 對象的副本,然后傳遞給其他 Handler 做處理。這樣對副本的修改不會影響到原本的對象,對原本對象的修改也不會影響到副本,示例代碼如下:

package main
 
import (
    "context"
    "log/slog"
    "os"
    "time"
)
 
func main() {
    logger := slog.New(slog.NewTextHandler(os.Stdout, nil))
    r := slog.NewRecord(time.Now(), slog.LevelInfo, "test", 1)
    r.Add("title", "路多辛的博客")
    _ = logger.Handler().Handle(context.Background(), r)
 
    r2 := r.Clone()
    r2.Add("subTitle", "路多辛的所思所想")
    l := slog.NewJSONHandler(os.Stdout, nil)
    _ = l.Handle(context.Background(), r2)
}

運(yùn)行程序輸出結(jié)果如下:

time=2023-10-17T21:24:23.588+08:00 level=INFO msg=test title=路多辛的博客
{"time":"2023-10-17T21:24:23.588517+08:00","level":"INFO","msg":"test","title":"路多辛的博客","subTitle":"路多辛的所思所想"}

小結(jié)

本文講解了 slog.Record 結(jié)構(gòu)體的簡單使用方法和使用時需要注意的點(diǎn),對應(yīng)的方法使用起來也都比較簡單,不再逐個講解,可以自己去嘗試使用。

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

相關(guān)文章

  • Golang?pprof監(jiān)控之cpu占用率統(tǒng)計(jì)原理詳解

    Golang?pprof監(jiān)控之cpu占用率統(tǒng)計(jì)原理詳解

    經(jīng)過前面的幾節(jié)對pprof的介紹,對pprof統(tǒng)計(jì)的原理算是掌握了七八十了,但唯獨(dú)還沒有分析pprof?工具是如何統(tǒng)計(jì)cpu使用情況的,今天我們來分析下這部分
    2023-04-04
  • Go語言中處理并發(fā)錯誤的常用方法總結(jié)

    Go語言中處理并發(fā)錯誤的常用方法總結(jié)

    在Go語言中,錯誤處理一直是開發(fā)中不可或缺的一部分,尤其在并發(fā)編程場景下,由于多個goroutine同時運(yùn)行,錯誤的傳遞和處理就變得更為復(fù)雜,這篇文章就介紹了一些常見的處理并發(fā)錯誤的方法,以供各位參考
    2025-06-06
  • 使用go module導(dǎo)入本地包的方法教程詳解

    使用go module導(dǎo)入本地包的方法教程詳解

    go module 將是Go語言默認(rèn)的依賴管理工具。到今天 Go1.14 版本推出之后 Go modules 功能已經(jīng)被正式推薦在生產(chǎn)環(huán)境下使用了。本文重點(diǎn)給大家介紹如何使用 go module 導(dǎo)入本地包,感興趣的朋友一起看看吧
    2020-03-03
  • go開發(fā)過程中mapstructure使用示例詳解

    go開發(fā)過程中mapstructure使用示例詳解

    mapstructure是一個Go語言庫,用于將映射(如map或struct)解碼為結(jié)構(gòu)體,便于處理JSON、YAML等配置文件數(shù)據(jù),通過字段名或結(jié)構(gòu)體標(biāo)簽控制解碼,支持嵌套結(jié)構(gòu)體、靈活處理多種數(shù)據(jù)源,需要注意錯誤處理,該庫適合于Go開發(fā)中配置數(shù)據(jù)的讀取和轉(zhuǎn)換
    2024-10-10
  • Go語言實(shí)現(xiàn)AzDG可逆加密算法實(shí)例

    Go語言實(shí)現(xiàn)AzDG可逆加密算法實(shí)例

    這篇文章主要介紹了Go語言實(shí)現(xiàn)AzDG可逆加密算法,實(shí)例分析了AzDG可逆加密算法的實(shí)現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • golang的空標(biāo)識符理解

    golang的空標(biāo)識符理解

    今天小編就為大家分享一篇關(guān)于golang的空標(biāo)識符理解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • golang?JSON序列化和反序列化示例詳解

    golang?JSON序列化和反序列化示例詳解

    通過使用Go語言的encoding/json包,你可以輕松地處理JSON數(shù)據(jù),無論是在客戶端應(yīng)用、服務(wù)器端應(yīng)用還是其他類型的Go程序中,這篇文章主要介紹了golang?JSON序列化和反序列化,需要的朋友可以參考下
    2024-04-04
  • Golang?int函數(shù)使用實(shí)例全面教程

    Golang?int函數(shù)使用實(shí)例全面教程

    這篇文章主要為大家介紹了Golang?int函數(shù)使用實(shí)例全面教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • golang并發(fā)編程使用Select語句的實(shí)現(xiàn)

    golang并發(fā)編程使用Select語句的實(shí)現(xiàn)

    Go語言中的select語句是并發(fā)編程中的重要工具,允許Goroutine等待多個通道操作,它阻塞直至任一case可執(zhí)行,可用于接收數(shù)據(jù)、實(shí)現(xiàn)超時機(jī)制和非阻塞通道操作,感興趣的可以了解一下
    2024-10-10
  • Go?Interface接口初學(xué)者手冊

    Go?Interface接口初學(xué)者手冊

    這篇文章主要為大家介紹了Go?Interface接口的基礎(chǔ)用法實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01

最新評論