http.FileServer を使用して静的ファイルを提供する場合、多くの場合、HTTP.FileServer を使用しないファイルに対してリクエストが行われたときにログを記録することが重要です。存在する。 http.FileServer 自体はそのようなログ記録を提供しませんが、その機能を拡張することでこの目標を達成できます。
http.StripPrefix および http.FileServer によって返されるハンドラーをラップするには、新しい http.Handler または http を作成します。ハンドラ関数。ラッパーはラップされたハンドラーを呼び出し、結果の HTTP 応答ステータス コードを検査します。エラー (具体的には HTTP 404 Not Found) を示している場合、イベントをログに記録できます。
http.ResponseWriter は応答ステータス コードの読み取りをサポートしていないため、そのラッパー (StatusRespWr) を作成します。このラッパーは、ステータス コードが書き込まれるときにステータス コードを保存します。
http.Handler ラッパーのコードは次のようになります。
<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 are error codes log.Printf("Error status code: %d when serving path: %s", srw.status, r.RequestURI) } } }</code>
メイン関数はファイル サーバーを作成し、それをラップします。
<code class="go">http.HandleFunc("/o/", wrapHandler( http.StripPrefix("/o", http.FileServer(http.Dir("/test"))))) panic(http.ListenAndServe(":8181", nil))</code>
存在しないファイルをリクエストすると、コンソールに次の出力が生成されます:
2015/12/01 11:47:40 Error status code: 404 when serving path: /o/sub/b.txt2
以上がGo で静的ファイルを提供するために「http.FileServer」を使用するときに 404 エラーをログに記録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。