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
Patricia Arquetteoriginal
2024-11-26 09:33:09140parcourir

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...)
}

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
}

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),
}

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()

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:
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