「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go で静的ファイルを提供するために「http.FileServer」を使用するときに 404 エラーをログに記録するにはどうすればよいですか?

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

2024 年 11 月 19 日に公開
ブラウズ:644

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

Http.FileServer の 404 エラーのロギング

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