[uber-zap/part4]自定义记录器

小龙虾 · · 351 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

说明

  • 之前翻译的一个教程(没有备份原地址,梯子被封了)。原地址找到后补上

正文

有时候,相比创建一个记录器,然后在函数中传递它,使用全局记录器会更方便
标准日志库log允许你使用log.New()创建自定义记录器,也可以调用帮助函数log.Printf()等直接使用标准记录器实例

zap使用zap.L()zap.S()提供这样的功能,但是对于我来说,不会直接使用它们。
你可以使用zap.L()访问全局标准记录器,这个函数返回共享记录器实例。加糖版本(sugared version)可以通过zap.S()访问

从我的简单使用中看到,这个共享记录器开箱即用--如果你只是立即使用它们,他们就不会提供输出。它们的唯一目的似乎是提供一种在代码中的任何位置检索此实例的简单方法

如果你确定要有用的使用此标准记录器,则需要使用zap.ReplaceGlobals()将记录器的核心替换为其他记录器的核心

func main() {
    fmt.Printf("\n*** Using the global logger out of box\n\n")

    zap.S().Infow("An INFO message", "iteration", 1)

    fmt.Printf("\n*** After replacing the global logger with a development logger\n\n")

    logger, _ := zap.NewDevelopment()
    zap.ReplaceGlobals(logger)

    zap.S().Infow("An INFO message", "iteration", 1)
}

输出

*** Using the global logger out of box


*** After replacing the global logger with a development logger

2018-11-01T10:08:10.017+0800    INFO    global_logger/main.go:19        An INFO message {"iteration": 1}

还有一种方法可以撤销全局记录器中的核心替换

func main() {
    fmt.Printf("\n*** After replacing the global logger with a development logger\n\n")
    logger, _ := zap.NewDevelopment()
    zap.ReplaceGlobals(logger)
    zap.S().Infow("An info message", "iteration", 1)

    fmt.Printf("\n*** After replacing the glboal logger with a production logger\n\n")
    logger, _ = zap.NewProduction()
    undo := zap.ReplaceGlobals(logger)
    zap.S().Infow("An info message", "iteration", 1)

    fmt.Printf("\n*** After replacing the glboal logger with a global logger\n\n")
    undo()    // 撤销
    zap.S().Infow("An info message", "iteration", 1)
}

输出

*** After replacing the global logger with a development logger

2018-11-01T10:39:34.555+0800    INFO    global_logger2/main.go:13       An info message {"iteration": 1}

*** After replacing the glboal logger with a production logger

{"level":"info","ts":1541039974.5559797,"caller":"global_logger2/main.go:18","msg":"An info message","iteration":1}

*** After replacing the glboal logger with a global logger

2018-11-01T10:39:34.556+0800    INFO    global_logger2/main.go:22       An info message {"iteration": 1}

本文来自:Segmentfault

感谢作者:小龙虾

查看原文:[uber-zap/part4]自定义记录器

入群交流(和以上内容无关):Go中文网 QQ 交流群:729884609 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

351 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传