From 62f557af524b142cebcf885db5231e36e70ea1ee Mon Sep 17 00:00:00 2001 From: hujiebin Date: Sat, 29 Jul 2023 09:35:10 +0800 Subject: [PATCH] redis hook --- resource/redisCli/redis.go | 2 ++ resource/redisCli/redis_hook.go | 38 +++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 resource/redisCli/redis_hook.go diff --git a/resource/redisCli/redis.go b/resource/redisCli/redis.go index efb7455..da6084f 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 0000000..6d59dad --- /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 +} -- 2.22.0