Ao servir arquivos estáticos usando http.FileServer, geralmente é importante registrar quando uma solicitação é feita para um arquivo que não existir. Embora o próprio http.FileServer não forneça esse registro, estender sua funcionalidade permite atingir esse objetivo.
Para agrupar o manipulador retornado por http.StripPrefix e http.FileServer, crie um novo http.Handler ou http. HandlerFunc. O wrapper chamará o manipulador empacotado e inspecionará o código de status da resposta HTTP resultante. Se indicar um erro (especificamente HTTP 404 Not Found), ele poderá registrar o evento.
Como http.ResponseWriter não suporta a leitura do código de status de resposta, crie um wrapper para ele (StatusRespWr). Este wrapper armazenará o código de status quando ele for escrito.
O código para o wrapper http.Handler é semelhante a este:
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)
}
}
}
A função principal pode criar o servidor de arquivos, envolvê-lo e registrá-lo:
http.HandleFunc("/o/", wrapHandler(
http.StripPrefix("/o", http.FileServer(http.Dir("/test")))))
panic(http.ListenAndServe(":8181", nil))
Ao solicitar um arquivo inexistente, a seguinte saída será gerada no console:
2015/12/01 11:47:40 Error status code: 404 when serving path: /o/sub/b.txt2
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3