request_id.go 696 B

12345678910111213141516171819202122232425262728293031
  1. package middleware
  2. import (
  3. "context"
  4. "github.com/gin-gonic/gin"
  5. "github.com/google/uuid"
  6. )
  7. const RequestIDKey = "X-Request-ID"
  8. // RequestID middleware adds a unique request ID to each request
  9. func RequestID() gin.HandlerFunc {
  10. return func(c *gin.Context) {
  11. // Check if request already has an ID
  12. requestID := c.GetHeader(RequestIDKey)
  13. if requestID == "" {
  14. requestID = uuid.New().String()
  15. }
  16. // Set request ID in header and context
  17. c.Header(RequestIDKey, requestID)
  18. c.Set(RequestIDKey, requestID)
  19. // Add request ID to context for logging
  20. ctx := context.WithValue(c.Request.Context(), RequestIDKey, requestID)
  21. c.Request = c.Request.WithContext(ctx)
  22. c.Next()
  23. }
  24. }