При обслуживании статических файлов с помощью http.FileServer часто важно регистрировать, когда делается запрос на файл, который не существовать. Хотя сам http.FileServer не обеспечивает такое ведение журнала, расширение его функциональности позволяет достичь этой цели.
Чтобы обернуть обработчик, возвращаемый http.StripPrefix и http.FileServer, создайте новый http.Handler или http. ОбработчикФунк. Оболочка вызовет завернутый обработчик и проверит полученный код состояния ответа HTTP. Если он указывает на ошибку (в частности, HTTP 404 Not Found), он может зарегистрировать событие.
Поскольку http.ResponseWriter не поддерживает чтение кода состояния ответа, создайте для него оболочку (StatusRespWr). Эта оболочка будет хранить код состояния при его записи.
Код оболочки http.Handler выглядит следующим образом:
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)
}
}
}
Функция main может создать файловый сервер, обернуть его и зарегистрировать:
http.HandleFunc("/o/", wrapHandler(
http.StripPrefix("/o", http.FileServer(http.Dir("/test")))))
panic(http.ListenAndServe(":8181", nil))
При запросе несуществующего файла в консоли будет сгенерирован следующий вывод:
2015/12/01 11:47:40 Error status code: 404 when serving path: /o/sub/b.txt2
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3