Comment se connecter à STDOUT et STDERR en fonction du niveau de journalisation à l'aide d'Uber-Go/Zap ?
Zap, une bibliothèque de journalisation Go populaire, vous permet de contrôler où les messages du journal sont écrits en fonction de leur niveau. Voici comment configurer Zap pour écrire :
Utilisation de ZapCore.NewTee avec des noyaux séparés :
Pour réaliser cette séparation, créez un noyau en tee qui combine deux noyaux :
Voici un exemple de programme démontrant cette technique :
<code class="go">package main import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" ) func main() { // 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 }) // Write syncers stdoutSyncer := zapcore.Lock(os.Stdout) stderrSyncer := zapcore.Lock(os.Stderr) // Tee core for InfoLevel and ErrorLevel/FatalLevel separation core := zapcore.NewTee( zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stdoutSyncer, infoLevel, ), zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stderrSyncer, errorFatalLevel, ), ) // Create logger with tee core logger := zap.New(core) logger.Info("Info log") logger.Error("Error log") }</code>
Dans cet exemple, le programme enregistre à la fois un message d'information sur STDOUT et un message d'erreur sur STDERR. Vous pouvez le vérifier en redirigeant les sorties respectives vers /dev/null :
<code class="bash"># stdout only $ go build main.go && ./main 2>/dev/null { "level": "info", "ts": <timestamp>, "msg": "Info log" } # stderr only $ go build main.go && ./main 1>/dev/null { "level": "error", "ts": <timestamp>, "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!