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

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
410 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!

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