]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front.git/blobdiff - api/logger.go
Context log fields.
[perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Front.git] / api / logger.go
index a24e08a34b8b726b751eafaef168d436af72b5ec..ea7266ba4fe450e4bb406afe7dee7adb693d2b86 100644 (file)
@@ -2,7 +2,6 @@ package api
 
 import (
        "fmt"
-       "strings"
        "time"
 
        "github.com/Sirupsen/logrus"
@@ -12,11 +11,24 @@ import (
 
 var log = utils.StandardL().WithField("module", "api")
 
+func SetContextLogField(c *gin.Context, field string, value interface{}) {
+       itf, ok := c.Get("logFields")
+       var fields map[string]interface{}
+       if !ok {
+               fields = make(map[string]interface{})
+       } else {
+               fields = itf.(map[string]interface{})
+       }
+
+       fields[field] = value
+       c.Set("logFields", fields)
+}
+
 func Logger() gin.HandlerFunc {
        return func(c *gin.Context) {
                path := c.Request.URL.Path
-               start := time.Now()
                rawQuery := c.Request.URL.RawQuery
+               start := time.Now()
 
                c.Next()
 
@@ -29,8 +41,10 @@ func Logger() gin.HandlerFunc {
                l = l.WithField("method", c.Request.Method)
                l = l.WithField("status_code", code)
 
-               if _, exists := c.Get("user"); exists {
-                       l = l.WithField("user_id", GetUser(c).Id)
+               if itf, ok := c.Get("logFields"); ok {
+                       for field, value := range itf.(map[string]interface{}) {
+                               l = l.WithField(field, value)
+                       }
                }
 
                if rawQuery != "" {
@@ -44,18 +58,21 @@ func Logger() gin.HandlerFunc {
                var level logrus.Level
                switch {
                case code >= 200 && code < 400:
-                       level = logrus.InfoLevel
+                       level = logrus.DebugLevel
                case code >= 400 && code < 500:
-                       level = logrus.WarnLevel
+                       level = logrus.InfoLevel
                default:
                        level = logrus.ErrorLevel
                }
 
-               comment := c.Errors.ByType(gin.ErrorTypePrivate).String()
-               if comment != "" {
-                       msgLog = fmt.Sprintf("%s: %s", msgLog, strings.TrimSpace(comment))
+               errors := c.Errors.ByType(gin.ErrorTypePrivate)
+
+               for _, err := range errors {
+                       l.WithField("description", err.Err).Logf(level, "%s: %s", msgLog, err.Err)
                }
 
-               l.Logf(level, msgLog)
+               if errors == nil {
+                       l.Logf(level, msgLog)
+               }
        }
 }