diff --git a/server/middlewares/auth.go b/server/middlewares/auth.go index 09f2fef..16874cb 100644 --- a/server/middlewares/auth.go +++ b/server/middlewares/auth.go @@ -406,16 +406,6 @@ func GetRoomIDFromContext(ctx *gin.Context) (string, error) { func setLogFields(ctx *gin.Context, user *op.User, room *op.Room) { log := ctx.MustGet("log").(*logrus.Entry) - if log.Data == nil { - l := 5 - if user != nil { - l += 3 - } - if room != nil { - l += 2 - } - log.Data = make(logrus.Fields, l) - } if user != nil { log.Data["uid"] = user.ID log.Data["unm"] = user.Username diff --git a/server/middlewares/log.go b/server/middlewares/log.go index 76ef261..299ffcc 100644 --- a/server/middlewares/log.go +++ b/server/middlewares/log.go @@ -3,16 +3,30 @@ package middlewares import ( "fmt" "net/http" + "sync" "time" "github.com/gin-gonic/gin" "github.com/sirupsen/logrus" ) +var fieldsPool = sync.Pool{ + New: func() interface{} { + return make(logrus.Fields, 6) + }, +} + func NewLog(l *logrus.Logger) gin.HandlerFunc { return func(c *gin.Context) { + fields := fieldsPool.Get().(logrus.Fields) + defer func() { + clear(fields) + fieldsPool.Put(fields) + }() + entry := &logrus.Entry{ Logger: l, + Data: fields, } c.Set("log", entry) @@ -78,3 +92,15 @@ func formatter(param gin.LogFormatterParams) string { param.ErrorMessage, ) } + +func GetLogger(c *gin.Context) *logrus.Entry { + if log, ok := c.Get("log"); ok { + return log.(*logrus.Entry) + } + entry := &logrus.Entry{ + Logger: logrus.StandardLogger(), + Data: fieldsPool.Get().(logrus.Fields), + } + c.Set("log", entry) + return entry +}