Verwenden von uber-go/zap zum Protokollieren basierend auf der Protokollebene für stdout und stderr
Einführung
Die uber-go/zap-Bibliothek bietet robuste Protokollierungsfunktionen. Um bestimmte Anforderungen zu erfüllen, kann es von Vorteil sein, Protokolle unterschiedlicher Ebenen an separate Ziele wie stdout und stderr weiterzuleiten. In diesem Artikel wird erläutert, wie Sie diese Trennung erreichen und sicherstellen, dass Protokolle basierend auf ihrem Schweregrad auf die entsprechenden Geräte geschrieben werden.
Benutzerdefinierte Protokollierungskonfiguration
Um benutzerdefiniertes Protokollierungsverhalten in Uber festzulegen -go/zap, wir können die zap.Config-Struktur verwenden. Durch Ändern der Felder OutputPaths und ErrorOutputPaths können wir die Ziele für verschiedene Protokollebenen steuern. Wenn jedoch nur ein Pfad in OutputPaths oder ErrorOutputPaths festgelegt ist, werden alle Protokolle unabhängig von ihrer Ebene an dieses einzelne Ziel geschrieben.
Lösung: Zapcore.NewTee
Um die gewünschte Trennung zu erreichen, verwenden wir zapcore.NewTee, das einen T-Kern erstellt, der mehrere Kerne kombiniert. Jeder Kern kann Protokolle bestimmter Ebenen unabhängig verarbeiten und sie an ihre jeweiligen Ziele weiterleiten. So implementieren wir diese Lösung:
<code class="go">import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" ) func main() { stdoutSyncer := zapcore.Lock(os.Stdout) stderrSyncer := zapcore.Lock(os.Stderr) infoCore := zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stdoutSyncer, zap.InfoLevel, ) errorCore := zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stderrSyncer, zap.ErrorLevel, ) core := zapcore.NewTee(infoCore, errorCore) logger := zap.New(core) logger.Info("info log") logger.Error("error log") }</code>
In diesem Beispiel erstellen wir zwei Kerne: einen für Protokolle auf Informationsebene (in stdout geschrieben) und einen anderen für Protokolle auf Fehlerebene (in stderr geschrieben). Die zapcore.NewTee-Funktion kombiniert diese Kerne und ermöglicht so die Weiterleitung von Protokollen unterschiedlicher Ebenen an separate Ziele.
Durch die Umleitung von stdout oder stderr nach /dev/null können wir weiter überprüfen, ob jede Protokollnachricht tatsächlich geschrieben wird das richtige Gerät, je nach Level.
Das obige ist der detaillierte Inhalt vonWie können Sie die Uber Go Zap-Bibliothek verwenden, um Protokolle verschiedener Ebenen in stdout und stderr zu trennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!