1
0
mirror of https://github.com/inexio/thola.git synced 2026-10-24 03:08:55 +03:00
Files
thola/api/logger.go
2021-03-01 13:16:55 +01:00

53 lines
1.0 KiB
Go

package api
import (
"github.com/labstack/echo/v4"
"github.com/rs/zerolog/log"
"strconv"
"time"
)
func loggerMiddleware() echo.MiddlewareFunc {
return func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
var err error
req := c.Request()
res := c.Response()
start := time.Now()
if err = next(c); err != nil {
c.Error(err)
}
stop := time.Now()
logger := log.Logger.With().Str("request_id", res.Header().Get(echo.HeaderXRequestID)).Logger()
evt := logger.Info()
evt.Str("remote_ip", c.RealIP())
evt.Str("host", req.Host)
evt.Str("method", req.Method)
evt.Str("uri", req.RequestURI)
evt.Str("user_agent", req.UserAgent())
evt.Int("status", res.Status)
if err != nil {
evt.Err(err)
}
evt.Str("latency", stop.Sub(start).String())
cl := req.Header.Get(echo.HeaderContentLength)
if cl == "" {
cl = "0"
}
evt.Str("bytes_in", cl)
evt.Str("bytes_out", strconv.FormatInt(res.Size, 10))
evt.Msg("handled request")
return err
}
}
}