> 백엔드 개발 > Golang > Go에서 HTTP 응답을 어떻게 효과적으로 기록할 수 있나요?

Go에서 HTTP 응답을 어떻게 효과적으로 기록할 수 있나요?

Patricia Arquette
풀어 주다: 2024-11-28 11:08:11
원래의
304명이 탐색했습니다.

How Can I Effectively Log HTTP Responses in Go?

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

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