golang 里 context 和 logger 绑定的问题

查看 42|回复 1
作者:liudon   
import (
        "context"
        "github.com/pingcap/log"
        "go.uber.org/zap"
        iris "github.com/kataras/iris/v12"
)
func NewContext(ctx iris.Context, fields ...zap.Field) iris.Context {
        ctx.Values().Set(loggerKey, WithContext(ctx).With(fields...))
        return ctx
}
func WithContext(ctx iris.Context) *zap.Logger {
        if ctx == nil {
                return log.L()
        }
        if ctxLogger, ok := ctx.Values().Get(loggerKey).(*zap.Logger); ok {
                return ctxLogger
        } else {
                return log.L()
        }
}
func NewStdContext(ctx context.Context, fields ...zap.Field) iris.Context {
        ctx.WithValue(ctx, loggerKey, WithStdContext(ctx).With(fields...))
        return ctx
}
func WithStdContext(ctx context.Context) *zap.Logger {
        if ctx == nil {
                return log.L()
        }
        if ctxLogger, ok := ctx.Value(loggerKey).(*zap.Logger); ok {
                return ctxLogger
        } else {
                return log.L()
        }
}
分别用到了 iris.Context 和 context.Context ,现在要给每个 context 写一个绑定方法。
请教下,有没有更好的实现方式?

ctx, context, return, zap

gitrebase   
没用过 iris 、但用过 gin
在 gin 的设计里,gin.Context 中会包含 context.Context 字段,所以直接 set 到 context.Context 里就行,就不存在“要给每个 context 写一个绑定方法”
您需要登录后才可以回帖 登录 | 立即注册

返回顶部