Maison > développement back-end > Golang > Comment séparer les journaux par niveau de gravité à l'aide d'uber-go/zap ?

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

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