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

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