É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.
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.
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!