더북(TheBook)

로그 처리 미들웨어 작성

로그를 남기는 미들웨어를 작성해 보자.

▼ middleware.go 로그 처리 핸들러

func logHandler(next HandlerFunc) HandlerFunc {
    return func(c *Context) {
        // next(c)를 실행하기 전에 현재 시간을 기록
        t := time.Now()
         
        // 다음 핸들러 수행
        next(c)
     
        // 웹 요청 정보와 전체 소요 시간을 로그로 남김
        log.Printf("[%s] %q %v\n",
            c.Request.Method,
            c.Request.URL.String(),
            time.Now().Sub(t))
    }
}

logHandler 함수는 next(c)를 실행하기 전에 현재 시간을 기록하고, next(c)를 실행한 후에 전체 처리 시간을 로그로 남기게 하는 새로운 함수를 만들어 반환한다.

핸들러 함수를 logHandler 함수의 매개변수로 전달하여 실행한 결과를 라우터에 등록하면 로그 핸들러가 먼저 동작하고 나서 핸들러가 동작한다.

▼ main.go

r.HandleFunc(“GET”, ”/users/:id”, logHandler(func(c *Context) {
        fmt.Fprintf(c.ResponseWriter, “retrieve user %v\n”, c.Params[“id”])
}))

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.