Maison >développement back-end >Golang >Comment envoyer des journaux d'informations à stdout et des journaux d'erreurs/fatales à stderr à l'aide d'uber-go/zap ?

Comment envoyer des journaux d'informations à stdout et des journaux d'erreurs/fatales à stderr à l'aide d'uber-go/zap ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 11:45:291008parcourir

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

Comment se connecter à stdout ou stderr en fonction du niveau de connexion à l'aide d'uber-go/zap ?

Problème :

Configurez uber-go/zap pour écrire des journaux d'informations sur stdout et des journaux d'erreurs et fatals sur stderr.

Réponse :

Pour y parvenir, utilisez zapcore.NewTee avec deux cœurs, chacun étant configuré pour gérer des niveaux de journalisation spécifiques :

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

Cette configuration vous permet de contrôler l'emplacement d'écriture des différents niveaux de journalisation, offrant ainsi une plus grande flexibilité dans votre stratégie de journalisation.

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:
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