Heim >Backend-Entwicklung >Golang >Wie trennt man mit Uber-Go/Zap Infoprotokolle in STDOUT und Fehler-/schwerwiegende Protokolle in STDERR?
Wie protokolliere ich bei STDOUT und STDERR basierend auf der Protokollebene mit Uber-Go/Zap?
Zap, eine beliebte Go-Protokollierungsbibliothek, ermöglicht es Ihnen, basierend auf ihrer Ebene zu steuern, wo Protokollnachrichten geschrieben werden. So konfigurieren Sie Zap zum Schreiben:
ZapCore.NewTee mit separaten Kernen verwenden:
Um diese Trennung zu erreichen, erstellen Sie einen T-Kern, der zwei Kerne kombiniert:
Hier ist ein Beispielprogramm, das diese Technik demonstriert:
<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>
In diesem Beispiel protokolliert das Programm sowohl eine Info-Nachricht an STDOUT als auch eine Fehlermeldung an STDERR. Sie können dies überprüfen, indem Sie die entsprechenden Ausgaben nach /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>umleiten
Das obige ist der detaillierte Inhalt vonWie trennt man mit Uber-Go/Zap Infoprotokolle in STDOUT und Fehler-/schwerwiegende Protokolle in STDERR?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!