ホームページ  >  記事  >  バックエンド開発  >  Go で静的ファイルを提供するために「http.FileServer」を使用するときに 404 エラーをログに記録するにはどうすればよいですか?

Go で静的ファイルを提供するために「http.FileServer」を使用するときに 404 エラーをログに記録するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-31 01:42:29968ブラウズ

How can I log 404 errors when using `http.FileServer` to serve static files in Go?

Http.FileServer の 404 エラーのログ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。