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

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

 更新時(shí)間: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 類型用來(lái)保存日志事件的信息,定義如下:

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

有如下幾個(gè)方法:

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

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

func (r Record) Attrs(f func(Attr) bool),使用函數(shù) f 作用于日志記錄中的每個(gè)屬性,如果 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)建一個(gè) Record 對(duì)象,使用 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=路多辛的博客

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

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)體的簡(jiǎn)單使用方法和使用時(shí)需要注意的點(diǎn),對(duì)應(yīng)的方法使用起來(lái)也都比較簡(jiǎn)單,不再逐個(gè)講解,可以自己去嘗試使用。

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

相關(guān)文章

  • Go中的new()和make()函數(shù)區(qū)別及底層原理詳解

    Go中的new()和make()函數(shù)區(qū)別及底層原理詳解

    這篇文章主要為大家介紹了Go中的new()和make()函數(shù)區(qū)別及底層原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • go中如何獲取本機(jī)ip地址

    go中如何獲取本機(jī)ip地址

    這篇文章主要介紹了go中如何獲取本機(jī)ip地址問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 深入了解Go語(yǔ)言中g(shù)oioc框架的使用

    深入了解Go語(yǔ)言中g(shù)oioc框架的使用

    goioc?是一個(gè)基于?GO?語(yǔ)言編寫的依賴注入框架,基于反射來(lái)進(jìn)行編寫。本文主要為大家介紹了goioc框架的原理與使用,需要的可以參考一下
    2022-11-11
  • gin自定義中間件解決requestBody不可重讀(請(qǐng)求體取值)

    gin自定義中間件解決requestBody不可重讀(請(qǐng)求體取值)

    這篇文章主要介紹了gin自定義中間件解決requestBody不可重讀,確??刂破髂軌颢@取請(qǐng)求體值,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Golang的os標(biāo)準(zhǔn)庫(kù)中常用函數(shù)的整理介紹

    Golang的os標(biāo)準(zhǔn)庫(kù)中常用函數(shù)的整理介紹

    這篇文章主要介紹了Go語(yǔ)言的os標(biāo)準(zhǔn)庫(kù)中常用函數(shù),主要用來(lái)實(shí)現(xiàn)與操作系統(tǒng)的交互功能,需要的朋友可以參考下
    2015-10-10
  • golang中beego入門

    golang中beego入門

    Beego是一個(gè)基于Go語(yǔ)言的開源框架,用于構(gòu)建Web應(yīng)用程序和API,本文主要介紹了golang中beego入門,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Go語(yǔ)言map實(shí)現(xiàn)順序讀取

    Go語(yǔ)言map實(shí)現(xiàn)順序讀取

    當(dāng)我們遍歷 map 時(shí),那就是輸出的鍵值對(duì)順序是不確定的,本文主要介紹了Go語(yǔ)言map實(shí)現(xiàn)順序讀取, 文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • golang兩種調(diào)用rpc的方法

    golang兩種調(diào)用rpc的方法

    這篇文章主要介紹了golang兩種調(diào)用rpc的方法,結(jié)合實(shí)例形式分析了Go語(yǔ)言調(diào)用rpc的原理與實(shí)現(xiàn)方法,需要的朋友可以參考下
    2016-07-07
  • golangci-lint安裝與Goland集成問(wèn)題

    golangci-lint安裝與Goland集成問(wèn)題

    這篇文章主要介紹了golangci-lint安裝與Goland集成,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • golang如何部署到服務(wù)器及應(yīng)注意問(wèn)題解析

    golang如何部署到服務(wù)器及應(yīng)注意問(wèn)題解析

    這篇文章主要為大家介紹了golang如何部署到服務(wù)器及應(yīng)注意問(wèn)題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01

最新評(píng)論