Heim >Backend-Entwicklung >Golang >Wie trennt man Protokolle mit uber-go/zap nach Schweregrad?

Wie trennt man Protokolle mit uber-go/zap nach Schweregrad?

Susan Sarandon
Susan SarandonOriginal
2024-10-25 08:59:29663Durchsuche

How to Separate Logs by Severity Level Using uber-go/zap?

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:

  1. 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>
  2. Schreibsynchronisierungen einrichten:

    <code class="go">stdoutSyncer := zapcore.Lock(os.Stdout)
    stderrSyncer := zapcore.Lock(os.Stderr)</code>
  3. 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>
  4. 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
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:1626900981.520349,&quot;msg&quot;:&quot;info log&quot;}

$ ./main 1>/dev/null # displays only stderr logs
{&quot;level&quot;:&quot;error&quot;,&quot;ts&quot;:1626901025.056065,&quot;msg&quot;:&quot;error log&quot;}

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!

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