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

Comment puis-je enregistrer des erreurs 404 lors du traitement de fichiers avec « http.FileServer » dans Go ?

Patricia Arquette
Libérer: 2024-10-26 19:39:29
original
760 Les gens l'ont consulté

How can I log 404 errors when serving files with `http.FileServer` in Go?

Consignation des erreurs 404 pour Http.FileServer

Lors de la diffusion de fichiers avec http.FileServer, il peut être utile de consigner les instances où un fichier demandé n'existe pas, ce qui entraîne un code d'état 404. Cependant, le gestionnaire http.FileServer par défaut ne fournit pas cette fonctionnalité.

Extension des fonctionnalités

Pour enregistrer les erreurs 404, vous pouvez étendre les fonctionnalités de http.FileServer gestionnaire. Ceci peut être réalisé en encapsulant le gestionnaire avec un http.Handler ou http.HandlerFunc personnalisé.

Encapsulation du gestionnaire

Le gestionnaire wrapper invoquera le http.FileServer d'origine gestionnaire, puis inspectez le code d’état de la réponse HTTP. S'il s'agit d'une erreur (en particulier 404 Not Found), il peut enregistrer l'erreur de manière appropriée.

Response Status Code Wrapper

Comme http.ResponseWriter ne prend pas en charge la lecture du directement le code d'état de réponse, vous pouvez créer un wrapper qui stocke le code d'état lorsqu'il est défini.

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

func (w *StatusRespWr) WriteHeader(status int) {
    w.status = status // Store the status for later use
    w.ResponseWriter.WriteHeader(status)
}</code>
Copier après la connexion

Handler Wrapper

Avec le wrapper de code d'état de réponse dans place, vous pouvez créer un wrapper de gestionnaire qui enregistre les erreurs :

<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 indicate errors
            log.Printf("Error status code: %d when serving path: %s",
                srw.status, r.RequestURI)
        }
    }
}</code>
Copier après la connexion

Enregistrement du gestionnaire enveloppé

Enfin, vous pouvez enregistrer le gestionnaire enveloppé en tant qu'itinéraire dans votre Serveur HTTP :

<code class="go">http.HandleFunc("/o/", wrapHandler(http.FileServer(http.Dir("/test"))))</code>
Copier après la connexion

Exemple de sortie

Lorsqu'un fichier inexistant est demandé, le gestionnaire encapsulé enregistrera un message d'erreur sur la console :

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!