Gin 미들웨어에서 응답 본문 로깅
미들웨어에서는 디버깅 또는 감사 목적으로 응답 본문을 캡처하고 로깅해야 할 수도 있습니다. 그렇다면 Gin의 미들웨어 컨텍스트에서 응답 본문에 어떻게 액세스할 수 있나요?
Gin은 응답 작성을 내부적으로 관리하므로 본문을 직접 가져오기가 까다롭습니다. 이를 극복하려면 쓰기 작업을 가로채는 자체 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) }
이 작성자는 응답 본문을 작성과 함께 버퍼링합니다. 원본 작성자에게.
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를 컨텍스트에 할당합니다. 모든 응답이 캡처되도록 보장합니다. 그런 다음 상태 코드가 오류인 경우 본문을 기록합니다.
router.Use(ginBodyLogMiddleware)
이제 요청이 Gin 라우터에서 처리하면 미들웨어는 오류 상태 코드가 있는 요청에 대한 응답 본문을 가로채서 기록합니다.
이 접근 방식은 정적 파일에 대한 응답 본문을 기록하지 않지만 다음과 같은 사용 사례를 해결해야 합니다. 가장 역동적인 콘텐츠. 모든 파일을 가로채야 하는 경우 Gin 엔진 주위에 더 복잡한 래퍼가 필요합니다.
위 내용은 Gin 미들웨어에서 응답 본문을 캡처하고 기록하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!