组件分享之后端组件——在Golang中最长用的日志组件zap
背景
近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。
组件基本信息
- 组件:zap
- 开源协议:MIT License
内容
本节我们分享一个在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 国际许可协议 进行许可。
网友评论