前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >聊聊golang的zap的NewTee

聊聊golang的zap的NewTee

原创
作者头像
code4it
修改2020-12-14 15:09:52
修改2020-12-14 15:09:52
82200
代码可运行
举报
文章被收录于专栏:码匠的流水账码匠的流水账
运行总次数:0
代码可运行

本文主要研究一下golang的zap的NewTee

NewTee

zap@v1.16.0/zapcore/tee.go

代码语言:javascript
代码运行次数:0
复制
type multiCore []Core

func NewTee(cores ...Core) Core {
    switch len(cores) {
    case 0:
        return NewNopCore()
    case 1:
        return cores[0]
    default:
        return multiCore(cores)
    }
}

NewTee方法根据cores个数来返回不同的Core,若len(cores)为0,返回NewNopCore,若为1则返回cores[0],默认返回[]Core

multiCore

zap@v1.16.0/zapcore/tee.go

代码语言:javascript
代码运行次数:0
复制
func (mc multiCore) With(fields []Field) Core {
    clone := make(multiCore, len(mc))
    for i := range mc {
        clone[i] = mc[i].With(fields)
    }
    return clone
}

func (mc multiCore) Enabled(lvl Level) bool {
    for i := range mc {
        if mc[i].Enabled(lvl) {
            return true
        }
    }
    return false
}

func (mc multiCore) Check(ent Entry, ce *CheckedEntry) *CheckedEntry {
    for i := range mc {
        ce = mc[i].Check(ent, ce)
    }
    return ce
}

func (mc multiCore) Write(ent Entry, fields []Field) error {
    var err error
    for i := range mc {
        err = multierr.Append(err, mc[i].Write(ent, fields))
    }
    return err
}

func (mc multiCore) Sync() error {
    var err error
    for i := range mc {
        err = multierr.Append(err, mc[i].Sync())
    }
    return err
}

multiCore提供了With、Enabled、Check、Write、Sync方法,它们都是遍历multiCore执行对应的操作

实例

代码语言:javascript
代码运行次数:0
复制
func teeDemo() {
    buf := &bytes.Buffer{}
    teeCore := zapcore.NewTee(
        zapcore.NewCore(zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), zapcore.AddSync(buf), zap.InfoLevel),
        zapcore.NewCore(zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig()), zapcore.Lock(os.Stdout), zap.InfoLevel),
    )
    logger := zap.New(teeCore)
    logger.Info("hello")
    fmt.Print(buf)
}

这里zapcore.NewTee将json及console两个core衔接在一起,创建logger,之后logger会往两个core写入数据

输出

代码语言:javascript
代码运行次数:0
复制
2020-12-12T22:29:47.328+0800    INFO    hello
{"level":"info","ts":1607783387.3285708,"msg":"hello"}

小结

zapcore.NewTee方法可以把多个core衔接在一起,对应logger的操作会同时操作这些core。

doc

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • NewTee
  • multiCore
  • 实例
  • 小结
  • doc
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档