Maison > développement back-end > Golang > le corps du texte

Zap Logger ajoute l'UUID à tous les journaux dans Golang

PHPz
Libérer: 2024-02-14 19:24:09
avant
1186 Les gens l'ont consulté

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

Éditeur PHP Xigua Introduction : Dans Golang, la journalisation fait partie intégrante du processus de développement. Zap logger est une bibliothèque de journalisation très populaire qui offre des fonctions riches et des performances élevées. Récemment, une nouvelle fonctionnalité a été ajoutée au journal Zap, qui consiste à ajouter un UUID à tous les journaux. Le but de cette fonction est de mieux suivre les journaux et de permettre aux développeurs de suivre les problèmes dans les systèmes distribués. Grâce à cette nouvelle fonctionnalité, les développeurs peuvent localiser plus précisément les problèmes et améliorer l'efficacité du débogage. C'est une fonctionnalité très pratique pour les ingénieurs qui développent avec Golang.

Contenu de la question

J'ai utilisé cette méthode en 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()
}
Copier après la connexion

Dans mon gestionnaire lambda, j'ai :

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))
}
Copier après la connexion

J'ai une question, est-il possible d'ajouter de l'uuid à tous les logs sans les ajouter un par un ? Parce que dans chaque journal où je dois imprimer quelque chose, je dois ajouter zap.any("uuid", uuid)

Le problème est que je dois transmettre uuid comme paramètre à toutes les méthodes pour l'imprimer dans un message de journal ou une erreur.

Solution de contournement

Vous devrez réorganiser un peu votre code puisque vous créez simplement l'uuid dans le gestionnaire, ce qui signifie qu'il est spécifique à la demande alors que l'enregistreur est global...

Le point de cette bibliothèque, cependant, est que vous devez créer un sous-enregistreur (en fait, vous le faites déjà : vous y transmettez simplement les champs). Tous les journaux ultérieurs écrits dans le sous-enregistreur contiendront ces champs.

Par exemple :

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...)
}
Copier après la connexion

Sortie :

{"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"}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal