github.com/joao-fontenele/go-url-shortener@v1.3.4/pkg/api/middleware/logger.go (about)

     1  package middleware
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/joao-fontenele/go-url-shortener/pkg/logger"
     7  	"github.com/valyala/fasthttp"
     8  	"go.uber.org/zap"
     9  )
    10  
    11  // Logger is a middleware that logs request details
    12  func Logger(next fasthttp.RequestHandler) fasthttp.RequestHandler {
    13  	return func(ctx *fasthttp.RequestCtx) {
    14  		l := logger.Get()
    15  
    16  		reqID := zap.Uint64("reqId", ctx.ID())
    17  		localAddr := zap.String("localAddr", ctx.LocalAddr().String())
    18  		remoteAddr := zap.String("remoteAddr", ctx.RemoteAddr().String())
    19  		method := zap.ByteString("method", ctx.Method())
    20  		uri := zap.ByteString("uri", ctx.URI().RequestURI())
    21  
    22  		l.Debug(
    23  			"Request received",
    24  			reqID,
    25  			localAddr,
    26  			remoteAddr,
    27  			method,
    28  			uri,
    29  		)
    30  		defer func() {
    31  			elapsed := time.Since(ctx.ConnTime()).Seconds()
    32  			statusCode := ctx.Response.StatusCode()
    33  			l.Info(
    34  				"Request ended",
    35  				reqID,
    36  				localAddr,
    37  				remoteAddr,
    38  				method,
    39  				uri,
    40  				zap.Int("statusCode", statusCode),
    41  				zap.Float64("elapsedSeconds", elapsed),
    42  			)
    43  		}()
    44  
    45  		next(ctx)
    46  		return
    47  	}
    48  }