Files
utodo/pkg/middleware/logger/logger.go
2025-07-13 22:57:57 +08:00

54 lines
1000 B
Go

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
}
}