Connexion sur stdout et stderr à l'aide d'uber-go/zap
Séparation de la journalisation des différents niveaux de journalisation sur stdout et stderr à l'aide d'uber-go /zap peut être réalisé en utilisant un noyau en T. Un noyau de tee combine plusieurs noyaux, permettant d'écrire des journaux vers différentes destinations en fonction de leur niveau.
Comment créer un noyau de tee
Pour créer un noyau de tee, vous devez construire deux cœurs individuels : un pour stdout et un autre pour stderr. Chaque noyau comprend un encodeur pour formater les messages de journal et un synchroniseur pour écrire les journaux sur l'appareil approprié.
Exemple de noyau de tee
L'extrait suivant montre comment créer un noyau en t qui sépare les journaux d'informations vers stdout et les journaux d'erreurs/fatales vers stderr :
<code class="go">package main import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" ) func main() { // Syncers for stdout and stderr stdoutSyncer := zapcore.Lock(os.Stdout) stderrSyncer := zapcore.Lock(os.Stderr) // Create two level enablers 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 }, ) // Create two cores infoCore := zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stdoutSyncer, infoLevel, ) errorFatalCore := zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stderrSyncer, errorFatalLevel, ) // Combine the cores into a tee core teeCore := zapcore.NewTee( infoCore, errorFatalCore, ) // Create a logger with the tee core logger := zap.New( teeCore, ) // Log messages at different levels logger.Info("Info log") logger.Error("Error log") }</code>
Redirection de sortie
Pour vérifier la séparation de la sortie des journaux, vous pouvez redirigez stdout ou stderr vers /dev/null et observez la sortie restante.
<code class="bash">$ go build main.go $ ./main 2>/dev/null # Shows only stdout { "level": "info", "ts": 1626900981.520349, "msg": "info log" } $ ./main 1>/dev/null # Shows only stderr { "level": "error", "ts": 1626901025.056065, "msg": "error log" }</code>
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!