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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-26 19:39:29746ブラウズ

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

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