Maison  >  Article  >  développement back-end  >  Comment enregistrer les erreurs 404 sur le serveur de fichiers HTTP de Go ?

Comment enregistrer les erreurs 404 sur le serveur de fichiers HTTP de Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-26 20:40:29937parcourir

How to Log 404 Errors in Go's HTTP File Server?

Consignation des erreurs 404 dans le serveur de fichiers HTTP

Lorsque vous utilisez http.FileServer pour servir des fichiers à partir d'un répertoire, il n'est pas immédiatement clair comment se connecter Erreurs HTTP 404 (fichier introuvable) sur la console du serveur. Bien que le navigateur puisse afficher un message « Page 404 introuvable », ces informations ne sont pas automatiquement enregistrées par http.FileServer.

Pour résoudre ce problème, nous devons étendre les fonctionnalités des gestionnaires renvoyés par http.StripPrefix et http.FileServer. Nous pouvons le faire en les encapsulant dans des gestionnaires personnalisés ou des fonctions de gestionnaire et en enregistrant les wrappers.

Notre implémentation du wrapper invoquera le gestionnaire enveloppé. Après le retour du gestionnaire encapsulé, le wrapper peut inspecter le code d'état de la réponse HTTP. S'il indique une erreur (en particulier HTTP 404 Not Found), le wrapper peut la consigner de manière appropriée.

Cependant, http.ResponseWriter ne prend pas en charge la récupération du code d'état de la réponse. Pour surmonter ce problème, nous allons créer un StatusRespWr personnalisé qui enveloppe http.ResponseWriter et stocke le code d'état pour une récupération ultérieure.

Voici l'implémentation de StatusRespWr :

<code class="go">type StatusRespWr struct {
    http.ResponseWriter // We embed http.ResponseWriter
    status int
}

func (w *StatusRespWr) WriteHeader(status int) {
    w.status = status // Store the status for our own use
    w.ResponseWriter.WriteHeader(status)
}</code>

Ensuite, nous' Je vais envelopper le http.Handler :

<code class="go">func wrapHandler(h http.Handler) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        srw := &StatusRespWr{ResponseWriter: w}
        h.ServeHTTP(srw, r)
        if srw.status >= 400 { // 400+ codes are error codes
            log.Printf("Error status code: %d when serving path: %s", srw.status, r.RequestURI)
        }
    }
}</code>

Enfin, dans la fonction principale, nous créons un serveur de fichiers, l'encapsulons et enregistrons le gestionnaire encapsulé :

<code class="go">http.HandleFunc("/o/", wrapHandler(http.StripPrefix("/o", http.FileServer(http.Dir("/test")))))
panic(http.ListenAndServe(":8181", nil))</code>

Si une demande est fait pour un fichier inexistant, le message suivant sera enregistré :

2015/12/01 11:47:40 Error status code: 404 when serving path: /o/sub/b.txt2

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