54 lines
1000 B
Go
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
|
|
}
|
|
}
|