package logger import ( "fmt" "github.com/gofiber/fiber/v3" "github.com/spf13/cast" "loveuer/utodo/pkg/logger" "strconv" "strings" "sync" "time" ) func New() fiber.Handler { pool := sync.Pool{ New: func() any { return &strings.Builder{} }, } return func(c fiber.Ctx) error { start := time.Now() err := c.Next() duration := time.Since(start) method := c.Method() path := c.Path() status := c.Response().StatusCode() traceId := c.Context().Value(logger.CtxKey) buf := pool.Get().(*strings.Builder) defer pool.Put(buf) buf.Reset() buf.WriteString("API | ") buf.WriteString(start.Format("2006-01-02T15:04:05")) buf.WriteString(" | ") buf.WriteString(method) buf.WriteString(" | ") buf.WriteString(path) buf.WriteString(" | ") buf.WriteString(duration.String()) buf.WriteString(" | ") buf.WriteString(strconv.Itoa(status)) buf.WriteString(" | ") buf.WriteString(cast.ToString(traceId)) fmt.Println(buf.String()) return err } }