"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 写一个绑定方法。
请教下,有没有更好的实现方式?