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 중국어 웹사이트의 기타 관련 기사를 참조하세요!