github.com/ngocphuongnb/tetua@v0.0.7-alpha/app/middlewares/request.go (about) 1 package middlewares 2 3 import ( 4 "time" 5 6 "github.com/google/uuid" 7 "github.com/ngocphuongnb/tetua/app/logger" 8 "github.com/ngocphuongnb/tetua/app/server" 9 ) 10 11 const HEADER_REQUEST_ID = "X-Request-Id" 12 13 func RequestID(c server.Context) error { 14 requestId := c.Header(HEADER_REQUEST_ID) 15 16 if requestId == "" { 17 requestId = uuid.NewString() 18 } 19 20 c.Locals("request_id", requestId) 21 c.Header(HEADER_REQUEST_ID, requestId) 22 23 return c.Next() 24 } 25 26 func RequestLog(c server.Context) error { 27 start := time.Now() 28 err := c.Next() 29 latency := time.Since(start).Round(time.Millisecond) 30 logContext := logger.Context{ 31 "latency": latency.String(), 32 "status": c.Response().StatusCode(), 33 "method": c.Method(), 34 "path": c.Path(), 35 "ip": c.IP(), 36 } 37 38 if err != nil { 39 logContext["error"] = err.Error() 40 } 41 42 c.Logger().Info("Request completed", logContext) 43 return nil 44 }