http.FileServer を使用して静的ファイルを提供する場合、多くの場合、そうでないファイルに対してリクエストが行われたときにログを記録することが重要です。存在する。 http.FileServer 自体はそのようなログ記録を提供しませんが、その機能を拡張することでこの目標を達成できます。
http.StripPrefix および http.FileServer によって返されるハンドラーをラップするには、新しい http.Handler または http.FileServer を作成します。ハンドラ関数ラッパーはラップされたハンドラーを呼び出し、結果の 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)
}
}
}
メイン関数は、ファイル サーバーを作成し、ラップして登録できます:
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を提供するときの 404
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3