ホームページ >バックエンド開発 >Golang >HTTP ファイル サーバーの使用時に 404 エラーをログに記録するにはどうすればよいですか?

HTTP ファイル サーバーの使用時に 404 エラーをログに記録するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-27 03:12:30809ブラウズ

How to Log 404 Errors When Using HTTP File Server?

HTTP ファイル サーバーで欠落ファイルの 404 ステータスをログに記録する

http.FileServer を使用してファイルを提供する場合、存在しないファイルに対するリクエストが返されることがありますサーバー コンソールにログオンしていないと、ステータス コード 404 が表示されます。このため、欠落ファイルの追跡とトラブルシューティングが困難になる可能性があります。

解決策

HTTP 404 エラーをログに記録するには、http.StripPrefix() によって返されるハンドラーの機能を強化します。および http.FileServer():

  1. カスタム ハンドラーまたはハンドラー関数で元のハンドラーをラップします。
  2. http.ResponseWriter をラップする新しい StatusRespWr 構造体の WriteHeader() メソッドをオーバーライドします。 。これにより、HTTP ステータス コードをキャプチャできるようになります。

ラップされたハンドラーは元のハンドラーを呼び出し、応答の受信後に HTTP 404 以上のエラー コードをログに記録します。以下のコード例は完全な実装を示しています:

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

func (w *StatusRespWr) WriteHeader(status int) {
    w.status = status
    w.ResponseWriter.WriteHeader(status)
}

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 {
            log.Printf("Error status code: %d when serving path: %s", srw.status, r.RequestURI)
        }
    }
}

func main() {
    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

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

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