首頁  >  文章  >  後端開發  >  Zap logger 將 UUID 新增至 golang 中的所有日誌中

Zap logger 將 UUID 新增至 golang 中的所有日誌中

PHPz
PHPz轉載
2024-02-14 19:24:091117瀏覽

Zap logger 将 UUID 添加到 golang 中的所有日志中

php小編西瓜介紹:在golang中,日誌記錄是開發過程中不可或缺的一部分。而Zap logger則是一個非常受歡迎的日誌記錄庫,它提供了豐富的功能和高效能。最近,有一個新的功能被加入了Zap logger中,即將UUID加入到所有的日誌中。這個功能的作用是為了更好地追蹤日誌,方便開發人員在分散式系統中追蹤問題。透過這個新的功能,開發人員可以更精確地定位問題,並提高調試效率。對於使用golang進行開發的工程師來說,這是一個非常實用的功能。

問題內容

我在 lambda 中使用了這個方法:

import (
    "os"

    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
)

func initlogger() *zap.logger {
    config := zap.newproductionencoderconfig()
    config.encodetime = zapcore.rfc3339timeencoder
    consoleencoder := zapcore.newjsonencoder(config)
    core := zapcore.newtee(zapcore.newcore(consoleencoder, zapcore.addsync(os.stdout), zapcore.infolevel))
    return zap.new(core).with()
}

在我的 lambda 處理程序中,我有:

var (
    log *zap.Logger
)

func init() {
    log = u.InitLogger()
}

func handler(r events.APIGatewayProxyRequest) (*events.APIGatewayProxyResponse, error) {

    out, err := exec.Command("uuidgen").Output()
    uuid := strings.ReplaceAll(string(out), "\n", "")
    if err != nil {
        log.Error(err.Error())
    }

    log.Info("PRINT_1", zap.Any("uuid", uuid), zap.Any("Request", r.Body))
}

我有一個問題,是否可以將uuid添加到所有日誌中而不需要一一添加?因為在每個我需要列印一些內容的日誌中,我需要加入 zap.any("uuid", uuid)

問題是我需要將 uuid 作為參數傳遞給所有方法,以將其列印在日誌訊息或錯誤中。

解決方法

您將不得不稍微重新安排您的程式碼,因為您只是在處理程序中建立uuid,這意味著它是特定於請求的,而記錄器是全局的...

但是,針對該程式庫的要點是,您必須建立一個子記錄器(事實上,您已經在這樣做了:您只需將欄位傳遞到那裡)。任何後續寫入子記錄器的日誌都將包含這些欄位。

例如:

func main() {
    logger := initlogger(zap.string("foo", "bar"))
    logger.info("first message with our `foo` key")
    logger.info("second message with our `foo` key")
}

func initlogger(fields ...zap.field) *zap.logger {
    config := zap.newproductionencoderconfig()
    config.encodetime = zapcore.rfc3339timeencoder
    consoleencoder := zapcore.newjsonencoder(config)
    core := zapcore.newtee(zapcore.newcore(consoleencoder, zapcore.addsync(os.stdout), zapcore.infolevel))
    return zap.new(core).with(fields...)
}

輸出:

{"level":"info","ts":"2022-11-24T18:30:45+01:00","msg":"First message with our `foo` key","foo":"bar"}
{"level":"info","ts":"2022-11-24T18:30:45+01:00","msg":"Second message with our `foo` key","foo":"bar"}

以上是Zap logger 將 UUID 新增至 golang 中的所有日誌中的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除