替代 zap,Go 語言官方實現的結構化日誌包

在 Go 1.21 中,引入了一個新的 log 包 -- log/slog,這是一個強大的日誌記錄庫,提供了許多用於幫助開發人員更加有效地記錄、管理和理解日誌的工具。無論你是一個初級還是高級的 Go 開發人員,理解和掌控 go 的日誌系統是非常有用的。接下來,讓我們深入研究一下 Go 中的日誌行爲,並通過實例來詳細理解每個主要功能。

安裝

在 Go 1.21 中,log/slog 是系統自帶的,無需安裝。只需在代碼頂部加上 import "log/slog" 即可使用。

package main

import "log/slog"

初始化

在 Go 1.21 的標準庫中,log/slog 的初始化非常直觀。以下是一個簡單初始化示例:

package main

import "log/slog"

func main() {
    log := slog.New()
}

這將創建一個新的公共日誌記錄器,此記錄器具有默認的日誌級別(ERROR),但您可以使用 SetLevel 方法來修改這個級別。

設置日誌級別

log/slog 提供了設置日誌級別的方法。包括:DEBUG,INFO,WARNING,ERROR,FATAL。以下爲設置日誌級別的示例:

package main

import "log/slog"

func main() {
    log := slog.New()
    log.SetLevel(slog.DEBUG)
}

在這裏,我們把默認的日誌級別從 ERROR 設置爲 DEBUG。

日誌輸出

package main

import "log/slog"

func main() {
    log := slog.New()
    log.SetLevel(slog.DEBUG)

    log.Debug("this is a debug message")
    log.Info("this is an info message")
    log.Warning("this is a warning message")
    log.Error("this is an error message")
}

以上代碼,我們會看到所有的信息都會被打印出來。因爲我們把日誌等級設置成了 DEBUG, 這是最低級別的,所以所有的日誌信息都會被打印出來。

自定義日誌格式

log/slog 提供了 Formatter 接口,允許你自定義日誌的格式。你可以通過實現這個接口,創建自己的 Formatter。

package main

import (
    "log/slog"
    "os"
    "time"
)

type MyFormatter struct{}

func (f *MyFormatter) Format(entry *slog.Entry) ([]byte, error) {
    return []byte(fmt.Sprintf("%s [%s] %s\n", entry.Time.Format(time.RFC3339), entry.Level.String(), entry.Message), nil
}

func main() {
    log := slog.New()

    log.SetFormatter(&MyFormatter{})
    log.SetLevel(slog.DEBUG)
    log.SetOutput(os.Stdout)

    log.Debug("this is a debug message")
    log.Info("this is an info message")
    log.Warning("this is a warning message")
    log.Error("this is an error message")
}

以上是自定義日誌格式的示例,我們創建了一個新的 Formatter, 將日誌格式設置爲 [時間] [級別] 信息。

結語

以上就是 Go 1.21 標準庫 log/slog 的基本介紹和使用方法。希望這篇文章能幫助你更好地理解和使用 Go 的日誌系統,高效地處理你的日誌任務。祝編程愉快!

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/6ny5_pitNoZYvOeNX9Ocvg