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

Patricia Arquette
リリース: 2024-10-26 20:40:29
オリジナル
946 人が閲覧しました

How to Log 404 Errors in Go's HTTP File Server?

HTTP ファイル サーバーでの 404 エラーのログ記録

http.FileServer を使用してディレクトリからファイルを提供する場合、ログを記録する方法がすぐにはわかりませんサーバー コンソールで HTTP 404 エラー (ファイルが見つかりません) が発生する。ブラウザーに「404 ページが見つかりません」というメッセージが表示される場合がありますが、この情報は http.FileServer によって自動的に記録されません。

これに対処するには、両方の http.StripPrefix によって返されるハンドラーの機能を拡張する必要があります。および http.FileServer。これを行うには、それらをカスタム ハンドラーまたはハンドラー関数でラップし、ラッパーを登録します。

ラッパー実装は、ラップされたハンドラーを呼び出します。ラップされたハンドラーが戻った後、ラッパーは HTTP 応答ステータス コードを検査できます。エラー (特に HTTP 404 Not Found) を示している場合、ラッパーはこれを適切にログに記録できます。

ただし、http.ResponseWriter は応答ステータス コードの取得をサポートしていません。これを解決するには、http.ResponseWriter をラップし、後で取得できるようにステータス コードを保存するカスタム StatusRespWr を作成します。

StatusRespWr の実装は次のとおりです。

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

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

次に、 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>
ログイン後にコピー

If a request存在しないファイルに対して作成された場合、次のメッセージがログに記録されます:

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

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

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