package logger import ( "context" "strings" "time" "octopus/internal/config" "github.com/gofiber/fiber/v2" "github.com/rs/zerolog" "github.com/rs/zerolog/log" ) var ( CtxDebug = struct{}{} CtxTimezone = struct{}{} ) func NewKylinMiddleware() fiber.Handler { return func(c *fiber.Ctx) error { ctxLogger := log.With().Interface(config.LogTagTraceID, c.Locals("trace_id")) if authorization := c.Get(fiber.HeaderAuthorization); authorization != "" { ctxLogger.Str(config.LogTagAuthorization, authorization) } if bid := c.Get("Rcrai-Bid"); bid != "" { ctxLogger.Str(config.LogTagBID, bid) } if staffID := c.Get("Rcrai-StaffId"); staffID != "" { ctxLogger.Str(config.LogTagStaffID, staffID) } ctx := c.UserContext() logger := ctxLogger.Logger() logger = logger.Level(zerolog.InfoLevel) if lv := c.Get("Debug_Kylin"); strings.ToLower(lv) == "true" { ctx = context.WithValue(ctx, CtxDebug, struct{}{}) logger = logger.Level(zerolog.DebugLevel) } if tz := c.Get("R-Timezone"); tz != "" { if loc, err := time.LoadLocation(tz); err == nil { ctx = context.WithValue(ctx, CtxTimezone, loc) } } c.SetUserContext(logger.WithContext(ctx)) return c.Next() } }