Comment afficher les journaux sur stdout et stderr en fonction du niveau de journalisation à l'aide d'uber-go/zap
Pour séparer les journaux en fonction du niveau de gravité dans uber-go/zap, utilisent le concept de noyaux zapcore « tee-ing ». L'approche s'appuie sur un noyau en t qui combine deux noyaux indépendants, chacun avec des outils de niveau spécifiques.
Mise en œuvre :
Définir les outils de niveau :
<code class="go">infoLevel := zap.LevelEnablerFunc(func(level zapcore.Level) bool { return level == zapcore.InfoLevel }) errorFatalLevel := zap.LevelEnablerFunc(func(level zapcore.Level) bool { return level == zapcore.ErrorLevel || level == zapcore.FatalLevel })</code>
Configurer les synchroniseurs d'écriture :
<code class="go">stdoutSyncer := zapcore.Lock(os.Stdout) stderrSyncer := zapcore.Lock(os.Stderr)</code>
Construire le noyau du tee :
<code class="go">core := zapcore.NewTee( zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stdoutSyncer, infoLevel, ), zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stderrSyncer, errorFatalLevel, ), )</code>
Créer un enregistreur :
<code class="go">logger := zap.New(core)</code>
Démonstration :
<code class="go">logger.Info("info log") logger.Error("error log")</code>
Test :
Redirection de la sortie standard ou stderr vers /dev/null pour vérifier que les journaux d'informations sont imprimés sur stdout et les journaux d'erreurs sur stderr :
$ go build main.go $ ./main 2>/dev/null # displays only stdout logs {"level":"info","ts":1626900981.520349,"msg":"info log"} $ ./main 1>/dev/null # displays only stderr logs {"level":"error","ts":1626901025.056065,"msg":"error log"}
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!