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

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)體的使用方法和需要注意的點,文中的示例代碼講解詳細(xì),需要的可以學(xué)習(xí)一下

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

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)
}

運行程序,輸出結(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)
}

運行程序輸出結(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)體的簡單使用方法和使用時需要注意的點,對應(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判斷字符串是是否包含另一字符串的示例代碼

    golang判斷字符串是是否包含另一字符串的示例代碼

    在Go語言中,可以使用strings.Contains()函數(shù)來判斷一個字符串是否包含另一個字符串,該函數(shù)接受兩個參數(shù):要搜索的字符串和要查找的子字符串,如果子字符串存在于要搜索的字符串中,則返回true,否則返回false,下面通過示例詳細(xì)介紹,感興趣的朋友一起看看吧
    2023-09-09
  • GoFrame?gredis緩存DoVar及Conn連接對象的自動序列化

    GoFrame?gredis緩存DoVar及Conn連接對象的自動序列化

    這篇文章主要為大家介紹了GoFrame?gredis干貨DoVar?Conn連接對象自動序列化詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 一文初探Go語言中的reflect反射包

    一文初探Go語言中的reflect反射包

    這篇文章主要和大家分享一下Go語言中的reflect反射包,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Go語言有一定的幫助,需要的小伙伴可以參考一下
    2022-12-12
  • Go語言中的方法、接口和嵌入類型詳解

    Go語言中的方法、接口和嵌入類型詳解

    這篇文章主要介紹了Go語言中的方法、接口和嵌入類型詳解,本文分別對它們做了詳細(xì)講解,需要的朋友可以參考下
    2014-10-10
  • Go?Error?嵌套實現(xiàn)創(chuàng)建方式

    Go?Error?嵌套實現(xiàn)創(chuàng)建方式

    這篇文章主要介紹了Go?Error?嵌套到底是怎么實現(xiàn)的?大家都知道創(chuàng)建error有兩種方式分別是errors.new()另一種是fmt.errorf(),本文通過詳細(xì)例子給大家介紹,需要的朋友可以參考下
    2022-01-01
  • 基于Go語言實現(xiàn)分金幣游戲

    基于Go語言實現(xiàn)分金幣游戲

    這篇文章主要為大家詳細(xì)介紹了如何利用Go語言實現(xiàn)分金幣游戲,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Go語言O(shè)RM框架構(gòu)造查詢條件示例詳解

    Go語言O(shè)RM框架構(gòu)造查詢條件示例詳解

    這篇文章主要為大家介紹了Go語言O(shè)RM框架構(gòu)造查詢條件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Golang Map簡介以及底層原理

    Golang Map簡介以及底層原理

    這篇文章主要介紹了Golang Map簡介以及底層原理的相關(guān)資料,Go語言提供的map是一種鍵值對存儲結(jié)構(gòu),支持基本操作如len、delete等,map是非線程安全的,可用sync.Mutex確保并發(fā)安全,為高效查找和插入,需要的朋友可以參考下
    2024-10-10
  • Golang中單引號、雙引號、反引號的實現(xiàn)

    Golang中單引號、雙引號、反引號的實現(xiàn)

    Go語言中單引號表示rune類型,雙引號用于字符串支持轉(zhuǎn)義,反引號保留原始內(nèi)容且支持多行不轉(zhuǎn)義,三者區(qū)分關(guān)鍵在于字符處理方式與轉(zhuǎn)義規(guī)則,下面就來介紹一下
    2025-06-06
  • go如何終止多個for select循環(huán)嵌套的方法

    go如何終止多個for select循環(huán)嵌套的方法

    當(dāng)您想從嵌套循環(huán)中中斷,從select內(nèi)部終止循環(huán)時,標(biāo)記的中斷非常有用,本文主要介紹了go如何終止多個for select循環(huán)嵌套的方法,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01

最新評論

五指山市| 葫芦岛市| 永善县| 即墨市| 尚志市| 仁寿县| 南木林县| 珲春市| 荣昌县| 邵东县| 邵东县| 隆德县| 东乌| 乐都县| 岑巩县| 舞钢市| 泰宁县| 兰州市| 大新县| 长兴县| 岗巴县| 庐江县| 肃宁县| 广丰县| 蓬安县| 安达市| 神农架林区| 大余县| 万宁市| 南乐县| 金溪县| 左权县| 辉南县| 翼城县| 大同县| 龙胜| 沛县| 富顺县| 新化县| 齐齐哈尔市| 招远市|