Go를 사용하여 HTTP 응답 로깅
Go에서 요청 로깅은 Gorilla의 mux 및 핸들러와 같은 패키지를 사용하여 간단합니다. 그러나 응답을 로깅하는 것은 더 까다로울 수 있습니다. 이 문서에서는 이를 수행하는 방법을 살펴봅니다.
사용자 정의 로깅 처리기 사용
한 가지 해결 방법은 HTTP 처리기 기능을 래핑하는 사용자 정의 로깅 처리기를 만드는 것입니다. 아래 Eric Broda의 코드는 초기 프레임워크를 제공합니다.
func logHandler(fn http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { x, err := httputil.DumpRequest(r, true) if err != nil { http.Error(w, fmt.Sprint(err), http.StatusInternalServerError) return } log.Println(fmt.Sprintf("%q", x)) } }
응답 수정
실제로 클라이언트에 응답을 보내려면 코드 수정이 필요합니다.
func logHandler(fn http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { x, err := httputil.DumpRequest(r, true) if err != nil { http.Error(w, fmt.Sprint(err), http.StatusInternalServerError) return } log.Println(fmt.Sprintf("%q", x)) rec := httptest.NewRecorder() fn(rec, r) log.Println(fmt.Sprintf("%q", rec.Body)) // this copies the recorded response to the response writer for k, v := range rec.HeaderMap { w.Header()[k] = v } w.WriteHeader(rec.Code) rec.Body.WriteTo(w) } }
이 수정된 코드는 핸들러 함수를 래핑하고 요청과 응답 본문을 모두 기록합니다. 이 로깅 핸들러를 미들웨어 스택에 배치하면 애플리케이션 전체에서 응답을 쉽게 기록할 수 있습니다.
위 내용은 Go에서 HTTP 응답을 어떻게 효과적으로 기록할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!