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