介绍
zap是Uber推出的一个日志包,性能出色
安装
go get -u go.uber.org/zap
使用
zap提供了3种快速创建logger的方法,2种格式化输出类型
创建logger
创建logger的方法有3种,详细程度zap.NewProduction() > zap.NewDevelopment() > zap.NewExample()
支持的日志级别有: debug、info、warn、error、fatal等
zap.NewProduction()
用于生产环境,返回 json 格式的数据
logger, _ := zap.NewProduction()
- 日志级别默认不支持
debug
zap.NewDevelopment()
用于开发环境,返回的数据中最后一部分自定义内容是 json 格式
logger, _ := zap.NewDevelopment()
zap.NewExample()
用于本机开发调试,不包含时间信息
logger := zap.NewExample()
格式化输出
2种格式化输出类型: Logger和SugaredLogger
输出的常用方法有: Debug()、Info()、Warn()、Error()、Fatal()等
常用方法后面会接不同字母,如: w、f、ln,如Infow()、Warnf()、“Errorln()`等,存在字母后缀的方法只是输出格式不同而已
- 需要注意的是
Fatal()是输出后中断程序
Logger
Logger支持结构化和强类型,用在性能和类型安全很重要时,输出参数是强类型
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),
)
zap底层有缓冲,在任何情况下都执行defer logger.Sync()
Info中结构化中的字段是强类型,不是松散类型,使用Any方法可以支持任意类型模拟松散类型
logger.Info("failed to fetch URL",
zap.Any("url", url),
zap.Any("attempt", 3),
zap.Any("backoff", time.Second),
)
SugaredLogger
SugaredLogger支持结构化和printf格式语句,用在需要性能但安全不是很重要时,输出参数是松散类型
从Logger变更为SugaredLogger,就是logger之后执行logger.Sugar()
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)
zap底层有缓冲,在任何情况下都执行defer logger.Sync()