>백엔드 개발 >Golang >Gorilla Mux 및 핸들러를 사용하여 Go 웹 애플리케이션에서 HTTP 응답을 기록하려면 어떻게 해야 합니까?

Gorilla Mux 및 핸들러를 사용하여 Go 웹 애플리케이션에서 HTTP 응답을 기록하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-07 22:56:12738검색

How Can I Log HTTP Responses in a Go Web Application Using Gorilla Mux and Handlers?

Go 및 Gorilla의 Mux 및 핸들러 패키지로 HTTP 응답 로깅

Go 애플리케이션에서 웹 구성을 위해 Gorilla의 Mux 및 핸들러 패키지 활용 애플리케이션이 HTTP 응답을 기록하려고 할 때 문제를 제시합니다. Gorilla의 LoggingHandler를 사용하면 요청 로깅이 쉽게 달성되지만 응답 로깅에는 다른 접근 방식이 필요합니다.

한 가지 잠재적인 해결책은 원래 핸들러를 래핑하는 사용자 정의 미들웨어 기능을 만드는 것입니다. 이 미들웨어는 요청과 응답을 모두 가로채서 다음 코드에 표시된 대로 둘 다 로깅할 수 있습니다.

func logResponse(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // Capture the request
        requestBytes, err := httputil.DumpRequest(r, true)
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
        log.Printf("%q", requestBytes)

        // Create a new ResponseRecorder to capture the response
        rec := httptest.NewRecorder()
        next.ServeHTTP(rec, r)

        // Capture the response
        responseBytes := rec.Body.Bytes()
        log.Printf("%q", responseBytes)

        // Copy the recorder's headers and body into the original ResponseWriter
        for k, v := range rec.HeaderMap {
            w.Header()[k] = v
        }
        w.WriteHeader(rec.Code)
        w.Write(responseBytes)
    })
}

이 미들웨어는 Gorilla 라우터의 원래 핸들러를 래핑하여 활용할 수 있습니다.

// Import Gorilla packages
import (
    "github.com/gorilla/mux"
    "github.com/gorilla/handlers"
)

func main() {
    // Setup Gorilla router
    r := mux.NewRouter()

    // Wrap the handler with the logging middleware
    wrappedHandler := handlers.LoggingHandler(os.Stdout, http.HandlerFunc(handler))

    // Register the handler with the router
    r.Handle("/api/v1/users", wrappedHandler)

    // Start the server
    http.ListenAndServe(":8080", r)
}

이 사용자 정의 미들웨어를 사용하면 HTTP 요청과 응답을 모두 쉽게 기록할 수 있어 애플리케이션의 관찰 가능성이 향상되고 디버깅 및 성능이 향상됩니다. 모니터링합니다.

위 내용은 Gorilla Mux 및 핸들러를 사용하여 Go 웹 애플리케이션에서 HTTP 응답을 기록하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.