Heim >Backend-Entwicklung >Golang >Der Zap-Logger fügt UUID zu allen Protokollen in Golang hinzu

Der Zap-Logger fügt UUID zu allen Protokollen in Golang hinzu

PHPz
PHPznach vorne
2024-02-14 19:24:091190Durchsuche

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

PHP-Editor Xigua Einführung: In Golang ist die Protokollierung ein integraler Bestandteil des Entwicklungsprozesses. Zap Logger ist eine sehr beliebte Protokollierungsbibliothek, die umfangreiche Funktionen und hohe Leistung bietet. Kürzlich wurde dem Zap-Logger eine neue Funktion hinzugefügt, mit der UUID zu allen Protokollen hinzugefügt werden kann. Der Zweck dieser Funktion besteht darin, Protokolle besser zu verfolgen und Entwicklern die Verfolgung von Problemen in verteilten Systemen zu erleichtern. Mit dieser neuen Funktion können Entwickler Probleme genauer lokalisieren und die Debugging-Effizienz verbessern. Dies ist eine sehr praktische Funktion für Ingenieure, die mit Golang entwickeln.

Frageninhalt

Ich habe diese Methode in Lambda verwendet:

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

In meinem Lambda-Handler habe ich:

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

Ich habe eine Frage: Ist es möglich, UUID zu allen Protokollen hinzuzufügen, ohne sie einzeln hinzuzufügen? Denn in jedem Protokoll, in dem ich etwas ausdrucken muss, muss ich zap.any("uuid", uuid)

hinzufügen

Das Problem ist, dass ich uuid als Parameter an alle Methoden übergeben muss, um es in einer Protokollmeldung oder einem Fehler auszugeben.

Problemumgehung

Sie müssen Ihren Code ein wenig neu anordnen, da Sie nur die UUID im Handler erstellen, was bedeutet, dass sie anforderungsspezifisch ist, während der Logger global ist...

Der Sinn dieser Bibliothek besteht jedoch darin, dass Sie einen Sublogger erstellen müssen (tatsächlich tun Sie dies bereits: Sie übergeben einfach die Felder dort). Alle nachfolgenden Protokolle, die in den Sublogger geschrieben werden, enthalten diese Felder.

Zum Beispiel:

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

Ausgabe:

{"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"}

Das obige ist der detaillierte Inhalt vonDer Zap-Logger fügt UUID zu allen Protokollen in Golang hinzu. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen