Maison > développement back-end > Golang > le corps du texte

Comment séparer les journaux d'informations vers STDOUT et les journaux d'erreurs/fatales vers STDERR à l'aide d'Uber-Go/Zap ?

DDD
Libérer: 2024-10-25 08:52:29
original
240 Les gens l'ont consulté

How to Separate Info Logs to STDOUT and Error/Fatal Logs to STDERR Using Uber-Go/Zap?

Comment se connecter à STDOUT et STDERR en fonction du niveau de journalisation à l'aide d'Uber-Go/Zap ?

Zap, une bibliothèque de journalisation Go populaire, vous permet de contrôler où les messages du journal sont écrits en fonction de leur niveau. Voici comment configurer Zap pour écrire :

  • Journaux d'informations sur STDOUT
  • Journaux d'erreurs et fatales vers STDERR

Utilisation de ZapCore.NewTee avec des noyaux séparés :

Pour réaliser cette séparation, créez un noyau en tee qui combine deux noyaux :

  • Un noyau dédié à InfoLevel, écrivant dans STDOUT.
  • Un autre noyau dédié à ErrorLevel et FatalLevel, écrivant dans STDERR.

Voici un exemple de programme démontrant cette technique :

<code class="go">package main

import (
    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
    "os"
)

func main() {
    // Level enablers
    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
    })

    // Write syncers
    stdoutSyncer := zapcore.Lock(os.Stdout)
    stderrSyncer := zapcore.Lock(os.Stderr)

    // Tee core for InfoLevel and ErrorLevel/FatalLevel separation
    core := zapcore.NewTee(
        zapcore.NewCore(
            zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
            stdoutSyncer,
            infoLevel,
        ),
        zapcore.NewCore(
            zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
            stderrSyncer,
            errorFatalLevel,
        ),
    )

    // Create logger with tee core
    logger := zap.New(core)

    logger.Info("Info log")
    logger.Error("Error log")
}</code>
Copier après la connexion

Dans cet exemple, le programme enregistre à la fois un message d'information sur STDOUT et un message d'erreur sur STDERR. Vous pouvez le vérifier en redirigeant les sorties respectives vers /dev/null :

<code class="bash"># stdout only
$ go build main.go && ./main 2>/dev/null
{
  "level": "info",
  "ts": <timestamp>,
  "msg": "Info log"
}

# stderr only
$ go build main.go && ./main 1>/dev/null
{
  "level": "error",
  "ts": <timestamp>,
  "msg": "Error log"
}</code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!