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

Patricia Arquette
リリース: 2024-10-26 19:39:29
オリジナル
760 人が閲覧しました

How can I log 404 errors when serving files with `http.FileServer` in Go?

Http.FileServer の 404 エラーのログ

http.FileServer でファイルを提供する場合、要求されたファイルが存在するインスタンスをログに記録すると便利です。存在しないため、ステータス コード 404 が発生します。ただし、デフォルトの http.FileServer ハンドラーはこの機能を提供しません。

機能の拡張

404 エラーをログに記録するには、http.FileServer の機能を拡張できます。ハンドラ。これは、ハンドラーをカスタム http.Handler または http.HandlerFunc でラップすることで実現できます。

ハンドラーのラップ

ラッパー ハンドラーは、元の http.FileServer を呼び出します。ハンドラーを呼び出して、HTTP 応答ステータス コードを検査します。エラー (具体的には 404 Not Found) の場合は、エラーを適切に記録できます。

Response Status Code Wrapper

http.ResponseWriter は、応答ステータス コードを直接設定する場合は、ステータス コードが設定されたときにそれを格納するラッパーを作成できます。

<code class="go">type StatusRespWr struct {
    http.ResponseWriter // Embeds http.ResponseWriter
    status int
}

func (w *StatusRespWr) WriteHeader(status int) {
    w.status = status // Store the status for later use
    w.ResponseWriter.WriteHeader(status)
}</code>
ログイン後にコピー

Handler Wrapper

応答ステータス コード ラッパーを使用すると、ここで、エラーをログに記録するハンドラー ラッパーを作成できます。

<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 indicate errors
            log.Printf("Error status code: %d when serving path: %s",
                srw.status, r.RequestURI)
        }
    }
}</code>
ログイン後にコピー

ラップされたハンドラーの登録

最後に、ラップされたハンドラーをルートとして登録できます。 HTTP サーバー:

<code class="go">http.HandleFunc("/o/", wrapHandler(http.FileServer(http.Dir("/test"))))</code>
ログイン後にコピー

出力例

存在しないファイルが要求されると、ラップされたハンドラーはコンソールにエラー メッセージを記録します:

2015/12/01 11:47:40 Error status code: 404 when serving path: /o/sub/b.txt2
ログイン後にコピー

以上がGo で「http.FileServer」を使用してファイルを提供するときに 404 エラーをログに記録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!