all repos

onasty @ 0c026f2

a one-time notes service

onasty/internal/transport/http/middlewares.go (view raw)

Smirnov Oleksandr Smirnov Oleksandr
ss2316544@gmail.com
feat: implement auth (#4)..., 1 year ago
1
package http
2
3
import (
4
	"log/slog"
5
	"time"
6
7
	"github.com/gin-gonic/gin"
8
)
9
10
// TODO: include requiest id
11
func (t *Transport) logger() gin.HandlerFunc {
12
	return func(c *gin.Context) {
13
		start := time.Now()
14
		path := c.Request.URL.Path
15
		raw := c.Request.URL.RawQuery
16
17
		c.Next()
18
		latency := time.Since(start)
19
20
		if raw != "" {
21
			path = path + "?" + raw
22
		}
23
24
		lvl := slog.LevelInfo
25
		if c.Writer.Status() >= 500 {
26
			lvl = slog.LevelError
27
		}
28
29
		slog.LogAttrs(
30
			c.Request.Context(),
31
			lvl,
32
			c.Errors.ByType(gin.ErrorTypePrivate).String(),
33
			slog.String("latency", latency.String()),
34
			slog.String("method", c.Request.Method),
35
			slog.Int("status_code", c.Writer.Status()),
36
			slog.String("path", path),
37
			slog.String("client_ip", c.ClientIP()),
38
			slog.Int("body_size", c.Writer.Size()),
39
		)
40
	}
41
}