Al servir archivos estáticos usando http.FileServer, a menudo es importante registrar cuando se realiza una solicitud para un archivo que no existir. Si bien http.FileServer en sí no proporciona dicho registro, ampliar su funcionalidad le permite lograr este objetivo.
Para ajustar el controlador devuelto por http.StripPrefix y http.FileServer, cree un nuevo http.Handler o http. HandlerFunc. El contenedor llamará al controlador empaquetado e inspeccionará el código de estado de respuesta HTTP resultante. Si indica un error (específicamente HTTP 404 no encontrado), puede registrar el evento.
Dado que http.ResponseWriter no admite la lectura del código de estado de respuesta, cree un contenedor para él (StatusRespWr). Este contenedor almacenará el código de estado cuando se escriba.
El código para el contenedor http.Handler se ve así:
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)
}
}
}
La función principal puede crear el servidor de archivos, empaquetarlo y registrarlo:
http.HandleFunc("/o/", wrapHandler(
http.StripPrefix("/o", http.FileServer(http.Dir("/test")))))
panic(http.ListenAndServe(":8181", nil))
Al solicitar un archivo no existente, se generará el siguiente resultado en la consola:
2015/12/01 11:47:40 Error status code: 404 when serving path: /o/sub/b.txt2
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3