diff --git a/resource/redisCli/redis.go b/resource/redisCli/redis.go index efb7455882c3e4cd4f1b38e4375e985ed1390d5f..da6084fbec339bc3bf0ebe8fb51ae6d0295b5bf2 100644 --- a/resource/redisCli/redis.go +++ b/resource/redisCli/redis.go @@ -26,6 +26,8 @@ func init() { } else { mylogrus.MyLog.Info("redis db0 connection success - ", pong) } + // log hook + RedisClient.AddHook(redisHook{}) } func GetRedis() *redis.Client { diff --git a/resource/redisCli/redis_hook.go b/resource/redisCli/redis_hook.go new file mode 100644 index 0000000000000000000000000000000000000000..6d59dad5586c51fd9ea7254ac10317f9775c6468 --- /dev/null +++ b/resource/redisCli/redis_hook.go @@ -0,0 +1,38 @@ +package redisCli + +import ( + "context" + "git.hilo.cn/hilo-common/mylogrus" + "github.com/go-redis/redis/v8" + "time" +) + +type redisCost struct{} + +var redisCostKey = redisCost{} + +type redisHook struct{} + +func (redisHook) BeforeProcess(ctx context.Context, cmd redis.Cmder) (context.Context, error) { + ctx = context.WithValue(ctx, redisCostKey, time.Now()) + return ctx, nil +} + +func (redisHook) AfterProcess(ctx context.Context, cmd redis.Cmder) error { + traceId, userId := ctx.Value("traceId"), ctx.Value("userId") + start := ctx.Value(redisCostKey) + var cost int64 + if s, ok := start.(time.Time); ok { + cost = time.Now().Sub(s).Milliseconds() + } + mylogrus.MyLog.Infof("redis cmd: <%s>,err:%v traceId:%v,userId:%v,cost:%v ms", cmd.String(), cmd.Err(), traceId, userId, cost) + return nil +} + +func (redisHook) BeforeProcessPipeline(ctx context.Context, cmds []redis.Cmder) (context.Context, error) { + return ctx, nil +} + +func (redisHook) AfterProcessPipeline(ctx context.Context, cmds []redis.Cmder) error { + return nil +}