Wie melde ich mich bei stdout oder stderr basierend auf der Protokollebene mit uber-go/zap an?
Problem:
Konfigurieren Sie uber-go/zap so, dass Infoprotokolle nach stdout und Fehler- und schwerwiegende Protokolle nach stderr geschrieben werden.
Antwort:
Um dies zu erreichen, Verwenden Sie zapcore.NewTee mit zwei Kernen, von denen jeder für die Verarbeitung bestimmter Protokollebenen festgelegt ist:
<code class="go">import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" ) func main() { // Create a level enabler for info logs infoLevel := zap.LevelEnablerFunc(func(level zapcore.Level) bool { return level == zapcore.InfoLevel }) // Create a level enabler for error and fatal logs errorFatalLevel := zap.LevelEnablerFunc(func(level zapcore.Level) bool { return level == zapcore.ErrorLevel || level == zapcore.FatalLevel }) // Create stdout and stderr writers stdoutSyncer := zapcore.Lock(os.Stdout) stderrSyncer := zapcore.Lock(os.Stderr) // Create a tee core that writes to both stdout and stderr core := zapcore.NewTee( // Core for info logs zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stdoutSyncer, infoLevel, ), // Core for error and fatal logs zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stderrSyncer, errorFatalLevel, ), ) // Create a logger with the tee core logger := zap.New(core) // Log info and error messages logger.Info("info log") logger.Error("error log") }</code>
Mit dieser Konfiguration können Sie steuern, wohin in verschiedene Protokollebenen geschrieben wird, was eine größere Flexibilität bei Ihrer Protokollierungsstrategie bietet.
Das obige ist der detaillierte Inhalt vonWie sende ich Infoprotokolle an stdout und Fehler-/schwerwiegende Protokolle an stderr mit uber-go/zap?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!