Protokollierung auf stdout und stderr mit uber-go/zap
Trennung der Protokollierung verschiedener Protokollebenen auf stdout und stderr mit uber-go /zap kann durch die Verwendung eines T-Kerns erreicht werden. Ein T-Kern kombiniert mehrere Kerne und ermöglicht so das Schreiben von Protokollen an verschiedene Ziele basierend auf ihrer Ebene.
So erstellen Sie einen T-Kern
Um einen T-Kern zu erstellen, Sie müssen zwei einzelne Kerne konstruieren: einen für stdout und einen anderen für stderr. Jeder Kern enthält einen Encoder zum Formatieren der Protokollnachrichten und einen Synchronisierer zum Schreiben der Protokolle auf das entsprechende Gerät.
Beispiel für einen T-Kern
Der folgende Ausschnitt zeigt, wie man erstellt Ein Tee-Kern, der Infoprotokolle in stdout und Fehler-/schwerwiegende Protokolle in stderr trennt:
<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>
Ausgabeumleitung
Um die Trennung der Protokollausgabe zu überprüfen, können Sie Folgendes tun Leiten Sie stdout oder stderr nach /dev/null um und beobachten Sie die verbleibende Ausgabe.
<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>
Das obige ist der detaillierte Inhalt vonWie trennt man Protokolle mit uber-go/zap nach Ebene in Stdout und Stdderr?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!