> 백엔드 개발 > Golang > Gin 미들웨어에서 응답 본문을 캡처하고 기록하는 방법은 무엇입니까?

Gin 미들웨어에서 응답 본문을 캡처하고 기록하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-12 01:44:01
원래의
259명이 탐색했습니다.

How to Capture and Log Response Body in Gin Middleware?

Gin 미들웨어에서 응답 본문 로깅

미들웨어에서는 디버깅 또는 감사 목적으로 응답 본문을 캡처하고 로깅해야 할 수도 있습니다. 그렇다면 Gin의 미들웨어 컨텍스트에서 응답 본문에 어떻게 액세스할 수 있나요?

Gin은 응답 작성을 내부적으로 관리하므로 본문을 직접 가져오기가 까다롭습니다. 이를 극복하려면 쓰기 작업을 가로채는 자체 Writer를 구현해야 합니다. 단계별 접근 방식은 다음과 같습니다.

  1. Custom Writer 만들기:
type bodyLogWriter struct {
    gin.ResponseWriter
    body *bytes.Buffer
}

func (w bodyLogWriter) Write(b []byte) (int, error) {
    w.body.Write(b)
    return w.ResponseWriter.Write(b)
}
로그인 후 복사

이 작성자는 응답 본문을 작성과 함께 버퍼링합니다. 원본 작성자에게.

  1. 미들웨어 구현:
func ginBodyLogMiddleware(c *gin.Context) {
    blw := &bodyLogWriter{body: bytes.NewBufferString(""), ResponseWriter: c.Writer}
    c.Writer = blw
    c.Next()

     statusCode := c.Writer.Status()
    if statusCode >= 400 {
        fmt.Println("Response body: " + blw.body.String())
    }
}
로그인 후 복사

미들웨어에서는 사용자 정의 작성자 blw를 컨텍스트에 할당합니다. 모든 응답이 캡처되도록 보장합니다. 그런 다음 상태 코드가 오류인 경우 본문을 기록합니다.

  1. 미들웨어 사용:
router.Use(ginBodyLogMiddleware)
로그인 후 복사

이제 요청이 Gin 라우터에서 처리하면 미들웨어는 오류 상태 코드가 있는 요청에 대한 응답 본문을 가로채서 기록합니다.

이 접근 방식은 정적 파일에 대한 응답 본문을 기록하지 않지만 다음과 같은 사용 사례를 해결해야 합니다. 가장 역동적인 콘텐츠. 모든 파일을 가로채야 하는 경우 Gin 엔진 주위에 더 복잡한 래퍼가 필요합니다.

위 내용은 Gin 미들웨어에서 응답 본문을 캡처하고 기록하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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