组件分享之后端组件——在Golang中最长用的日志组件zap

背景

近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。

组件基本信息

内容

本节我们分享一个在Golang中比较常用的组件,日志组件zap,相比于其他日志组件,它的效率更加高效,以下是其官方对比结果:

记录一条消息10个字段:

image.png

使用已经有10个上下文字段的日志记录器记录消息:

image.png

日志一个静态字符串,没有任何上下文或printf风格的模板:

image.png

在使用方面,相比于内置的log包来讲有一定的复杂度,但在初始框架时我们肯定还要对其做一下简单的封装,便于其他各个模块进行快速使用,下面是其官方使用案例:

对其类型安全方面要求不是很高,性能方面要求很高时采用如下使用方式:

logger, _ := zap.NewProduction()
defer logger.Sync() // 刷新缓冲区
sugar := logger.Sugar()
sugar.Infow("failed to fetch URL",
  // 将上下文结构化为松散类型的键值对。
  "url", url,
  "attempt", 3,
  "backoff", time.Second,
)
sugar.Infof("Failed to fetch URL: %s", url)

对其性能和类型安全要求很高时使用如下案例:

logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("failed to fetch URL",
  // 结构化上下文作为强类型的字段值。
  zap.String("url", url),
  zap.Int("attempt", 3),
  zap.Duration("backoff", time.Second),
)

更多使用方式和框架中的封装方式,可以参考我的其他文章,FastDevelopGo框架,和其相关的Golang快速开发框架——增加日志组件zap(三),后续在使用过程中还会进行调整,建议直接参见框架中的源代码和其中的注释,能带来更好的帮助。

本文声明:
88x31.png
知识共享许可协议
本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。