Maison >développement back-end >Golang >Comment puis-je enregistrer des erreurs 404 lors du traitement de fichiers avec « http.FileServer » dans 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>
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>
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>
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
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!