>  기사  >  백엔드 개발  >  `http.HandleFunc` 및 미들웨어를 사용하여 실시간 HTTP 응답을 기록하는 방법은 무엇입니까?

`http.HandleFunc` 및 미들웨어를 사용하여 실시간 HTTP 응답을 기록하는 방법은 무엇입니까?

DDD
DDD원래의
2024-10-27 10:29:03237검색

How to Log Real-Time HTTP Responses with `http.HandleFunc` and Middleware?

http.HandleFunc를 사용하여 들어오는 HTTP 요청 로깅

이전 토론에서는 단위 테스트에 적합한 기술인 가짜 요청을 사용하여 HTTP 응답을 검사하는 방법을 살펴보았습니다. 그러나 우리는 라이브 서버에 실시간 응답 데이터를 기록하는 방법도 모색하고 있습니다.

미들웨어 체이닝

일반적인 접근 방식은 미들웨어 체인을 생성하는 것입니다. Negroni와 같은 라이브러리는 핸들러가 순차적으로 결합되고 실행되는 미들웨어 기능을 제공합니다. 핸들러 결합자를 사용하여 최소한의 미들웨어 구현을 달성할 수 있습니다.

<code class="go">func NewFooHandler(next http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        // Do pre-handling tasks
        next(w, r)
        // Do post-handling tasks
    }
}</code>

이러한 결합자를 연결하여 핸들러를 형성할 수 있습니다.

<code class="go">h := NewFooHandler(NewBarHandler(NewBazHandler(Sink)))</code>

HTTP.HandleFunc에 적용

이 기술을 문제에 적용하려면 핸들러 결합자를 생성할 수 있습니다.

<code class="go">func NewResponseLoggingHandler(next http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        // Record the response
        c := httptest.NewRecorder()
        next(c, r)
        
        // Copy responses
        for k, v := range c.HeaderMap {
            w.Header()[k] = v
        }
        w.WriteHeader(c.Code)
        c.Body.WriteTo(w)
    }
}</code>

이제 사용자 정의 핸들러와 응답 로깅을 결합하는 기본 핸들러를 생성할 수 있습니다.

<code class="go">func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc {
    return NewResponseLoggingHandler(NewOtherStuffHandler(next))
}</code>

이 기본 핸들러를 사용하면:

<code class="go">h := NewDefaultHandler(...)</code>

모든 후속 핸들러에는 자동으로 응답 로깅이 포함됩니다.

위 내용은 `http.HandleFunc` 및 미들웨어를 사용하여 실시간 HTTP 응답을 기록하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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