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

Comment séparer les journaux par niveau vers Stdout et Stderr à l'aide d'uber-go/zap ?

Linda Hamilton
Libérer: 2024-10-26 08:06:02
original
827 Les gens l'ont consulté

How to Separate Logs by Level to Stdout and Stderr using uber-go/zap?

Connexion sur stdout et stderr à l'aide d'uber-go/zap

Séparation de la journalisation des différents niveaux de journalisation sur stdout et stderr à l'aide d'uber-go /zap peut être réalisé en utilisant un noyau en T. Un noyau de tee combine plusieurs noyaux, permettant d'écrire des journaux vers différentes destinations en fonction de leur niveau.

Comment créer un noyau de tee

Pour créer un noyau de tee, vous devez construire deux cœurs individuels : un pour stdout et un autre pour stderr. Chaque noyau comprend un encodeur pour formater les messages de journal et un synchroniseur pour écrire les journaux sur l'appareil approprié.

Exemple de noyau de tee

L'extrait suivant montre comment créer un noyau en t qui sépare les journaux d'informations vers stdout et les journaux d'erreurs/fatales vers stderr :

<code class="go">package main

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

func main() {
    // Syncers for stdout and stderr
    stdoutSyncer := zapcore.Lock(os.Stdout)
    stderrSyncer := zapcore.Lock(os.Stderr)

    // Create two 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
        },
    )

    // Create two cores
    infoCore := zapcore.NewCore(
        zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
        stdoutSyncer,
        infoLevel,
    )

    errorFatalCore := zapcore.NewCore(
        zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
        stderrSyncer,
        errorFatalLevel,
    )

    // Combine the cores into a tee core
    teeCore := zapcore.NewTee(
        infoCore,
        errorFatalCore,
    )

    // Create a logger with the tee core
    logger := zap.New(
        teeCore,
    )

    // Log messages at different levels
    logger.Info("Info log")
    logger.Error("Error log")
}</code>
Copier après la connexion

Redirection de sortie

Pour vérifier la séparation de la sortie des journaux, vous pouvez redirigez stdout ou stderr vers /dev/null et observez la sortie restante.

<code class="bash">$ go build main.go

$ ./main 2>/dev/null # Shows only stdout
{
    "level": "info",
    "ts": 1626900981.520349,
    "msg": "info log"
}

$ ./main 1>/dev/null # Shows only stderr
{
    "level": "error",
   "ts": 1626901025.056065,
    "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
Derniers articles par auteur
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!