-
Notifications
You must be signed in to change notification settings - Fork 1
/
middleware.go
55 lines (49 loc) · 1.17 KB
/
middleware.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package rlog
import (
"time"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)
func LogMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
path := c.Request.URL.Path
ctx := c.Request.Context()
start := time.Now()
c.Next()
end := time.Now()
statusCode := c.Writer.Status()
if statusCode > 299 {
latency := end.Sub(start)
raw := c.Request.URL.RawQuery
clientIP := c.ClientIP()
forwardedHdr := c.Request.Header["X-Forwarded-For"]
forwardedFor := ""
if len(forwardedHdr) > 0 {
forwardedFor = forwardedHdr[0]
}
userAgent := c.Request.Header["User-Agent"]
method := c.Request.Method
var errors []error
for _, v := range c.Errors {
errors = append(errors, v.Err)
}
bodySize := c.Writer.Size()
if raw != "" {
path = path + "?" + raw
}
Infoc(
ctx,
"",
zap.String("method", method),
zap.Int("status_code", statusCode),
zap.String("path", path),
zap.Duration("latency", latency),
zap.String("userAgent", userAgent[0]),
zap.String("client_ip", clientIP),
zap.String("forwarded_for", forwardedFor),
zap.Int("body_size", bodySize),
zap.Errors("errors", errors),
)
}
}
}