http.ResponseWriter에서 데이터 로깅
Go에서는 다양한 기술을 사용하여 HTTP 요청-응답 주기에서 방출된 데이터를 로깅할 수 있습니다. 일반적인 질문 중 하나는 로깅 목적으로 http.ResponseWriter에 기록된 데이터를 얻는 것입니다.
해결책: io.MultiWriter 사용
응답 데이터를 캡처하려면 다음을 활용할 수 있습니다. io.MultiWriter를 사용하여 쓰기를 별도의 작성자에 복제합니다. 코드에서 새 bytes.Buffer 인스턴스를 로그 버퍼로 생성하고 이를 io.MultiWriter에 기록기 중 하나로 전달할 수 있습니다. MultiWriter를 응답 작성기로 사용하면 응답 데이터를 로그 버퍼에 복제할 수 있습니다.
코드 예:
<code class="go">import ( "bytes" "io" "net/http" ) func api1(w http.ResponseWriter, req *http.Request) { var log bytes.Buffer rsp := io.MultiWriter(w, &log) // Use rsp instead of w from this point onward // ... }</code>
이제 로그 버퍼( log)에는 응답 작성자에 기록된 응답 데이터의 복사본이 포함됩니다.
대체 솔루션: io.TeeReader 사용
요청 데이터를 캡처하려면 다음을 사용할 수 있습니다. io.TeeReader. 지정된 판독기에서 읽은 내용을 제공된 기록기에 쓰는 판독기를 생성합니다. 이 경우 이를 사용하여 로그 버퍼에 요청 본문의 복사본을 저장할 수 있습니다.
코드 예:
<code class="go">import ( "bytes" "io" "net/http" ) func api1(w http.ResponseWriter, req *http.Request) { var log bytes.Buffer tee := io.TeeReader(req.Body, &log) // Use tee instead of req.Body from this point onward // ... }</code>
io.TeeReader를 사용하면, 로그 버퍼에는 요청 본문 콘텐츠의 복사본이 포함됩니다.
이러한 기술을 활용하면 요청 및 응답 데이터를 모두 기록할 수 있어 API 요청에 대한 포괄적인 로깅이 용이해집니다.
위 내용은 Go에서 http.ResponseWriter의 응답 데이터를 기록하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!