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

PHPz
Freigeben: 2024-02-14 19:24:09
nach vorne
1103 Leute haben es durchsucht

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()
}
Nach dem Login kopieren

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))
}
Nach dem Login kopieren

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...)
}
Nach dem Login kopieren

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"}
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!