Maison  >  Article  >  développement back-end  >  Comment pouvez-vous utiliser la bibliothèque Uber Go Zap pour séparer les journaux de différents niveaux en stdout et stderr ?

Comment pouvez-vous utiliser la bibliothèque Uber Go Zap pour séparer les journaux de différents niveaux en stdout et stderr ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-25 17:25:17106parcourir

How can you use Uber Go Zap library to separate logs of different levels to stdout and stderr?

Utilisation d'uber-go/zap pour se connecter en fonction du niveau de journalisation sur stdout et stderr

Introduction

La bibliothèque uber-go/zap offre des capacités de journalisation robustes. Pour répondre à des exigences spécifiques, il peut être avantageux de diriger les journaux de différents niveaux vers des destinations distinctes, telles que stdout et stderr. Cet article explique comment réaliser cette séparation, en garantissant que les journaux sont écrits sur les appareils appropriés en fonction de leur gravité.

Configuration de journalisation personnalisée

Pour spécifier un comportement de journalisation personnalisé dans Uber -go/zap, nous pouvons utiliser la structure zap.Config. En modifiant les champs OutputPaths et ErrorOutputPaths, nous pouvons contrôler les destinations pour différents niveaux de journalisation. Cependant, si un seul chemin est défini dans OutputPaths ou ErrorOutputPaths, tous les journaux seront écrits vers cette destination unique, quel que soit leur niveau.

Solution : Zapcore.NewTee

Pour obtenir la séparation souhaitée, nous utilisons zapcore.NewTee, qui crée un noyau de tee qui combine plusieurs noyaux. Chaque noyau peut gérer indépendamment les journaux de niveaux spécifiques et les diriger vers leurs destinations respectives. Voici comment nous implémentons cette solution :

<code class="go">import (
    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
    "os"
)

func main() {
    stdoutSyncer := zapcore.Lock(os.Stdout)
    stderrSyncer := zapcore.Lock(os.Stderr)

    infoCore := zapcore.NewCore(
        zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
        stdoutSyncer,
        zap.InfoLevel,
    )

    errorCore := zapcore.NewCore(
        zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
        stderrSyncer,
        zap.ErrorLevel,
    )

    core := zapcore.NewTee(infoCore, errorCore)
    logger := zap.New(core)

    logger.Info("info log")
    logger.Error("error log")
}</code>

Dans cet exemple, nous créons deux cœurs : un pour les journaux au niveau des informations (écrits sur stdout) et un autre pour les journaux au niveau des erreurs (écrits sur stderr). La fonction zapcore.NewTee combine ces cœurs, permettant aux journaux de différents niveaux d'être dirigés vers des destinations distinctes.

En redirigeant stdout ou stderr vers /dev/null, nous pouvons en outre vérifier que chaque message de journal est bien écrit dans le bon appareil, en fonction de son niveau.

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