Maison > développement back-end > Golang > le corps du texte

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

Patricia Arquette
Libérer: 2024-10-26 20:40:29
original
946 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!