一、Zap介绍与安装

1、zap介绍

zap是uber公司开源的一款日志库,主要使用Golang语言编写,目前在github上已经有15k+以上的星星,具有速度快、支持结构化、分级的特点

https://www.liwenzhou.com/posts/Go/zap/

2、zap安装

注意:zap只支持Go当前的两个最新的小版本

该笔记使用时是Go1.17版本

1
go get -u go.uber.org/zap

二、Zap使用

1、zap特点

Zap是非常快的、结构化的,分日志级别的Go日志库。

  • 它同时提供了结构化日志记录和printf风格的日志记录
  • 它非常的快

2、zap性能

来自于github的zap官方库数据

对于在热路径中记录的应用程序来说,基于反射的序列化和字符串格式化是非常昂贵的–它们是CPU密集型的,并且会进行许多小的分配。换句话说,使用编码/json和fmt.Fprintf来记录大量的interface{}s会使你的应用程序变慢。

Zap采取了一种不同的方法。它包括一个无反射、零分配的JSON编码器,基本的Logger努力避免序列化开销和尽可能的分配。通过在这个基础上构建高级的SugaredLogger,Zap让用户选择何时需要计算每一次分配,何时喜欢更熟悉的、松散类型的API。

正如它自己的基准测试套件所衡量的那样,zap不仅比同类的结构化日志包更有性能,而且还比标准库更快。像所有的基准测试一样,请谨慎对待这些测试。

3、zap日志器分类

Zap提供了两种类型的日志记录器—Sugared LoggerLogger

在性能很好但不是很关键的上下文中,使用SugaredLogger。它比其他结构化日志记录包快4-10倍,并且支持结构化和printf风格的日志记录。

在每一微秒和每一次内存分配都很重要的上下文中,使用Logger。它甚至比SugaredLogger更快,内存分配次数也更少,但它只支持强类型的结构化日志记录。

3.1 Logger

注意事项:

  • 通过调用zap.NewProduction()/zap.NewDevelopment()或者zap.Example()创建一个Logger。
  • 上面的每一个函数都将创建一个logger。唯一的区别在于它将记录的信息不同。例如production logger默认记录调用函数信息、日期和时间等。
  • 通过Logger调用Info/Error等。
  • 默认情况下日志都会打印到应用程序的console界面。

3.2 Sugared Logger