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中文網其他相關文章!