Maison  >  Article  >  développement back-end  >  Zap Logger ajoute l'UUID à tous les journaux dans Golang

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

PHPz
PHPzavant
2024-02-14 19:24:091184parcourir

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

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

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

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

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer