Maison > développement back-end > Golang > Comment puis-je implémenter une journalisation personnalisée pour les erreurs net/http à l'aide de Zap ?

Comment puis-je implémenter une journalisation personnalisée pour les erreurs net/http à l'aide de Zap ?

Patricia Arquette
Libérer: 2024-11-26 09:33:09
original
139 Les gens l'ont consulté

How Can I Implement Custom Logging for net/http Errors Using Zap?

Journalisation personnalisée pour net/http avec Zap

La journalisation des erreurs depuis net/http dans un format personnalisé nécessite la mise en œuvre de votre propre mécanisme de journalisation. Le package net/http fournit une structure de serveur qui inclut un champ ErrorLog, vous permettant de spécifier un enregistreur personnalisé.

Implémentation d'un enregistreur personnalisé

Pour remplacer l'enregistreur par défaut , créez une implémentation personnalisée :

type AppLogger struct {
  log *zap.SugaredLogger
}

func (l *AppLogger) Error(message string, keyAndValues ...interface{}) {
  l.log.Errorw(message, keyAndValues...)
}
Copier après la connexion

Intégration avec net/http

Créez un type qui implémente io.Writer et délègue à votre enregistreur personnalisé :

type serverJsonWriter struct {
  *zap.Logger
}

func (w serverJsonWriter) Write(p []byte) (n int, err error) {
  w.Error(string(p))
  return len(p), nil
}
Copier après la connexion

Enfin, instanciez un nouveau http.Server et définissez le champ ErrorLog sur votre rédacteur personnalisé :

server := &http.Server{
  Addr:     addr,
  Handler:  handler,
  ErrorLog: logger.New(&serverJsonWriter{l}, "", 0),
}
Copier après la connexion

où l est votre enregistreur de zap instance.

Récupération du zap io.Writer

Vous pouvez récupérer le zap io.Writer en appelant logger.Writer() sur l'instance du logger :

zapWriter := logger.Writer()
Copier après la connexion

Supplémentaire Notes

  • Le type serverJsonWriter sérialise les messages de journal au format JSON, qui correspond au format par défaut de zap.
  • Vous pouvez personnaliser le type serverJsonWriter pour ajouter des champs supplémentaires ou des options de formatage spécifique à vos besoins 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!

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