Utilisation d'uber-go/zap pour se connecter en fonction du niveau de journalisation sur stdout et stderr
Introduction
La bibliothèque uber-go/zap offre des capacités de journalisation robustes. Pour répondre à des exigences spécifiques, il peut être avantageux de diriger les journaux de différents niveaux vers des destinations distinctes, telles que stdout et stderr. Cet article explique comment réaliser cette séparation, en garantissant que les journaux sont écrits sur les appareils appropriés en fonction de leur gravité.
Configuration de journalisation personnalisée
Pour spécifier un comportement de journalisation personnalisé dans Uber -go/zap, nous pouvons utiliser la structure zap.Config. En modifiant les champs OutputPaths et ErrorOutputPaths, nous pouvons contrôler les destinations pour différents niveaux de journalisation. Cependant, si un seul chemin est défini dans OutputPaths ou ErrorOutputPaths, tous les journaux seront écrits vers cette destination unique, quel que soit leur niveau.
Solution : Zapcore.NewTee
Pour obtenir la séparation souhaitée, nous utilisons zapcore.NewTee, qui crée un noyau de tee qui combine plusieurs noyaux. Chaque noyau peut gérer indépendamment les journaux de niveaux spécifiques et les diriger vers leurs destinations respectives. Voici comment nous implémentons cette solution :
<code class="go">import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" ) func main() { stdoutSyncer := zapcore.Lock(os.Stdout) stderrSyncer := zapcore.Lock(os.Stderr) infoCore := zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stdoutSyncer, zap.InfoLevel, ) errorCore := zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stderrSyncer, zap.ErrorLevel, ) core := zapcore.NewTee(infoCore, errorCore) logger := zap.New(core) logger.Info("info log") logger.Error("error log") }</code>
Dans cet exemple, nous créons deux cœurs : un pour les journaux au niveau des informations (écrits sur stdout) et un autre pour les journaux au niveau des erreurs (écrits sur stderr). La fonction zapcore.NewTee combine ces cœurs, permettant aux journaux de différents niveaux d'être dirigés vers des destinations distinctes.
En redirigeant stdout ou stderr vers /dev/null, nous pouvons en outre vérifier que chaque message de journal est bien écrit dans le bon appareil, en fonction de son niveau.
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!