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

Comment séparer les journaux par niveau de gravité à l'aide d'uber-go/zap ?

Susan Sarandon
Libérer: 2024-10-25 08:59:29
original
570 Les gens l'ont consulté

How to Separate Logs by Severity Level Using uber-go/zap?

Comment afficher les journaux sur stdout et stderr en fonction du niveau de journalisation à l'aide d'uber-go/zap

Pour séparer les journaux en fonction du niveau de gravité dans uber-go/zap, utilisent le concept de noyaux zapcore « tee-ing ». L'approche s'appuie sur un noyau en t qui combine deux noyaux indépendants, chacun avec des outils de niveau spécifiques.

Mise en œuvre :

  1. Définir les outils de niveau :

    <code class="go">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
    })</code>
    Copier après la connexion
  2. Configurer les synchroniseurs d'écriture :

    <code class="go">stdoutSyncer := zapcore.Lock(os.Stdout)
    stderrSyncer := zapcore.Lock(os.Stderr)</code>
    Copier après la connexion
  3. Construire le noyau du tee :

    <code class="go">core := zapcore.NewTee(
     zapcore.NewCore(
         zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
         stdoutSyncer,
         infoLevel,
     ),
     zapcore.NewCore(
         zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
         stderrSyncer,
         errorFatalLevel,
     ),
    )</code>
    Copier après la connexion
  4. Créer un enregistreur :

    <code class="go">logger := zap.New(core)</code>
    Copier après la connexion

Démonstration :

<code class="go">logger.Info("info log")
logger.Error("error log")</code>
Copier après la connexion

Test :
Redirection de la sortie standard ou stderr vers /dev/null pour vérifier que les journaux d'informations sont imprimés sur stdout et les journaux d'erreurs sur stderr :

$ go build main.go

$ ./main 2>/dev/null # displays only stdout logs
{&quot;level&quot;:&quot;info&quot;,&quot;ts&quot;:1626900981.520349,&quot;msg&quot;:&quot;info log&quot;}

$ ./main 1>/dev/null # displays only stderr logs
{&quot;level&quot;:&quot;error&quot;,&quot;ts&quot;:1626901025.056065,&quot;msg&quot;:&quot;error log&quot;}
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!