Heim  >  Artikel  >  Backend-Entwicklung  >  Wie sende ich Infoprotokolle an stdout und Fehler-/schwerwiegende Protokolle an stderr mit uber-go/zap?

Wie sende ich Infoprotokolle an stdout und Fehler-/schwerwiegende Protokolle an stderr mit uber-go/zap?

Barbara Streisand
Barbara StreisandOriginal
2024-10-26 11:45:29943Durchsuche

How to Send Info Logs to stdout and Error/Fatal Logs to stderr Using uber-go/zap?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn