feat: log fileds pool

pull/269/head
zijiren233 11 months ago
parent b13c53cc8c
commit 56a99fe990

@ -406,16 +406,6 @@ func GetRoomIDFromContext(ctx *gin.Context) (string, error) {
func setLogFields(ctx *gin.Context, user *op.User, room *op.Room) { func setLogFields(ctx *gin.Context, user *op.User, room *op.Room) {
log := ctx.MustGet("log").(*logrus.Entry) 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 { if user != nil {
log.Data["uid"] = user.ID log.Data["uid"] = user.ID
log.Data["unm"] = user.Username log.Data["unm"] = user.Username

@ -3,16 +3,30 @@ package middlewares
import ( import (
"fmt" "fmt"
"net/http" "net/http"
"sync"
"time" "time"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
var fieldsPool = sync.Pool{
New: func() interface{} {
return make(logrus.Fields, 6)
},
}
func NewLog(l *logrus.Logger) gin.HandlerFunc { func NewLog(l *logrus.Logger) gin.HandlerFunc {
return func(c *gin.Context) { return func(c *gin.Context) {
fields := fieldsPool.Get().(logrus.Fields)
defer func() {
clear(fields)
fieldsPool.Put(fields)
}()
entry := &logrus.Entry{ entry := &logrus.Entry{
Logger: l, Logger: l,
Data: fields,
} }
c.Set("log", entry) c.Set("log", entry)
@ -78,3 +92,15 @@ func formatter(param gin.LogFormatterParams) string {
param.ErrorMessage, 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
}

Loading…
Cancel
Save