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.StripPrefix에서 반환되는 핸들러의 기능을 확장해야 합니다. 및 http.FileServer. 이를 사용자 정의 핸들러 또는 핸들러 함수로 래핑하고 래퍼를 등록하면 됩니다.

래퍼 구현은 래핑된 핸들러를 호출합니다. 래핑된 핸들러가 반환된 후 래퍼는 HTTP 응답 상태 코드를 검사할 수 있습니다. 오류(특히 HTTP 404 찾을 수 없음)를 나타내는 경우 래퍼는 이를 적절하게 기록할 수 있습니다.

그러나 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>
로그인 후 복사

요청이 있는 경우 존재하지 않는 파일에 대해 작성된 경우 다음 메시지가 기록됩니다.

2015/12/01 11:47:40 Error status code: 404 when serving path: /o/sub/b.txt2
로그인 후 복사

위 내용은 Go의 HTTP 파일 서버에 404 오류를 기록하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!