So geben Sie Protokolle basierend auf der Protokollstufe mit uber-go/zap auf stdout und stderr aus
Um Protokolle basierend auf der Schweregradstufe zu trennen uber-go/zap, nutzen das Konzept des „Abschlagens“ von Zapcore-Kernen. Der Ansatz nutzt einen T-Kern, der zwei unabhängige Kerne mit jeweils spezifischen Level-Enablern kombiniert.
Implementierung:
Level-Enabler definieren:
<code class="go">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 })</code>
Schreibsynchronisierungen einrichten:
<code class="go">stdoutSyncer := zapcore.Lock(os.Stdout) stderrSyncer := zapcore.Lock(os.Stderr)</code>
Tee-Kern konstruieren:
<code class="go">core := zapcore.NewTee( zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stdoutSyncer, infoLevel, ), zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stderrSyncer, errorFatalLevel, ), )</code>
Logger erstellen:
<code class="go">logger := zap.New(core)</code>
Demonstration:
<code class="go">logger.Info("info log") logger.Error("error log")</code>
Testen:
Standard umleiten oder stderr nach /dev/null, um zu überprüfen, ob Infoprotokolle nach stdout und Fehlerprotokolle nach stderr gedruckt werden:
$ go build main.go $ ./main 2>/dev/null # displays only stdout logs {"level":"info","ts":1626900981.520349,"msg":"info log"} $ ./main 1>/dev/null # displays only stderr logs {"level":"error","ts":1626901025.056065,"msg":"error log"}
Das obige ist der detaillierte Inhalt vonWie trennt man Protokolle mit uber-go/zap nach Schweregrad?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!