...
1 package fog
2
3 import (
4 "errors"
5 "fmt"
6 "net/http"
7
8 "github.com/go-logr/logr"
9 )
10
11
12
13 func MiddlewareLogger(l logr.Logger, middlewareContext *MiddlewareContext) {
14 r := middlewareContext.Request
15 status := middlewareContext.Status
16 logmsg := fmt.Sprintf("%s %s %d %s", r.Method, r.URL.Path, status, http.StatusText(status))
17 l.WithValues(
18 "httpRequest", map[string]interface{}{
19 "requestMethod": r.Method,
20 "requestUrl": r.RequestURI,
21 "status": status,
22 "bytes": middlewareContext.Size,
23 "elapsed": middlewareContext.Time.Microseconds(),
24 },
25 SeverityKey, levelSeverity(status),
26 )
27
28 if status > 400 {
29 l.WithValues("httpResponse", map[string]interface{}{
30 "body": middlewareContext.Body.String(),
31 })
32 }
33 if status < 500 {
34 l.Info(logmsg)
35 } else {
36 l.Error(errors.New(http.StatusText(status)), logmsg)
37 }
38 }
39
40
41 func levelSeverity(status int) string {
42 switch {
43 case status <= 0:
44 return Warning
45 case status < 400:
46 return Info
47 case status >= 400 && status < 500:
48 return Warning
49 case status >= 500:
50 return Error
51 default:
52 return Info
53 }
54 }
55
View as plain text