Files
MyGoServer/internal/apiserver/middleware/request_id.go

39 lines
985 B
Go

package middleware
import (
"context"
"net/http"
"git.nwaifu.su/sergey/MyGoServer/internal/apiserver/logger"
"github.com/google/uuid"
)
// requestIDKey is a custom type for context key to avoid collisions
type requestIDKey struct{}
var _ requestIDKey
// RequestIDMiddleware adds a unique request ID to each request
func RequestIDMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Generate a new request ID
requestID := uuid.New().String()
// Set request ID in response header
w.Header().Set("X-Request-ID", requestID)
// Add request ID to context using custom type
ctx := r.Context()
ctx = context.WithValue(ctx, requestIDKey{}, requestID)
// Log the request ID assignment
logger := logger.GetLogger()
logger.WithFields(map[string]interface{}{
"request_id": requestID,
}).Debug("Request ID assigned")
// Continue with the request
next.ServeHTTP(w, r.WithContext(ctx))
})
}