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 }