package middleware import ( "log/slog" "time" "github.com/gin-gonic/gin" "go.opentelemetry.io/otel/trace" "switchbot-api/internal/transport/http/contextkeys" ) func AccessLog(logger *slog.Logger) gin.HandlerFunc { return func(c *gin.Context) { start := time.Now() c.Next() route := c.FullPath() if route == "" { route = "/unknown" } spanCtx := trace.SpanContextFromContext(c.Request.Context()) traceID := "" spanID := "" if spanCtx.IsValid() { traceID = spanCtx.TraceID().String() spanID = spanCtx.SpanID().String() } logger.Info( "http_request", slog.String("method", c.Request.Method), slog.String("path", c.Request.URL.Path), slog.String("route", route), slog.Int("status", c.Writer.Status()), slog.Duration("duration", time.Since(start)), slog.String("request_id", contextkeys.RequestIDFromContext(c.Request.Context())), slog.String("trace_id", traceID), slog.String("span_id", spanID), ) } }