介绍
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()