slog gin logging
This commit is contained in:
parent
47c2b947a9
commit
6de85f5c00
@ -17,6 +17,7 @@ import (
|
||||
"os/signal"
|
||||
"path/filepath"
|
||||
"slices"
|
||||
"strconv"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
@ -1075,8 +1076,67 @@ func (s *Server) GenerateRoutes() http.Handler {
|
||||
}
|
||||
config.AllowOrigins = envconfig.Origins()
|
||||
|
||||
r := gin.Default()
|
||||
r := gin.New()
|
||||
r.Use(
|
||||
gin.Recovery(),
|
||||
func(c *gin.Context) {
|
||||
t := time.Now()
|
||||
|
||||
c.Next()
|
||||
|
||||
_, remotePort, err := net.SplitHostPort(c.Request.RemoteAddr)
|
||||
if err != nil {
|
||||
remotePort = "0"
|
||||
}
|
||||
|
||||
logger := slog.Default().With(
|
||||
slog.Duration("duration", time.Since(t)),
|
||||
slog.Group(
|
||||
"http",
|
||||
slog.String("method", c.Request.Method),
|
||||
slog.Group(
|
||||
"url",
|
||||
slog.String("path", c.Request.URL.Path),
|
||||
slog.String("query", c.Request.URL.RawQuery),
|
||||
),
|
||||
slog.Int("status_code", c.Writer.Status()),
|
||||
slog.String("user_agent", c.Request.UserAgent()),
|
||||
),
|
||||
slog.Group(
|
||||
"network",
|
||||
slog.Int("bytes_written", c.Writer.Size()),
|
||||
slog.Int64("bytes_read", c.Request.ContentLength),
|
||||
slog.Group(
|
||||
"remote",
|
||||
slog.String("ip", net.JoinHostPort(c.ClientIP(), remotePort)),
|
||||
),
|
||||
slog.Group(
|
||||
"server",
|
||||
slog.String("ip", c.Request.Host),
|
||||
),
|
||||
),
|
||||
)
|
||||
if len(c.Errors) > 0 {
|
||||
errs := make([]any, len(c.Errors))
|
||||
for i, err := range c.Errors {
|
||||
errs[i] = slog.String(strconv.Itoa(i), err.Error())
|
||||
}
|
||||
|
||||
logger = logger.With(slog.Group("errors", errs...))
|
||||
}
|
||||
|
||||
var level slog.Level
|
||||
switch {
|
||||
case c.Writer.Status() >= http.StatusInternalServerError:
|
||||
level = slog.LevelError
|
||||
case c.Writer.Status() >= http.StatusBadRequest:
|
||||
level = slog.LevelWarn
|
||||
default:
|
||||
level = slog.LevelInfo
|
||||
}
|
||||
|
||||
logger.Log(c.Request.Context(), level, "request complete")
|
||||
},
|
||||
cors.New(config),
|
||||
allowedHostsMiddleware(s.addr),
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user