zap 和 logrus 是 go 语言中日志包的佼佼者. 两者都推荐使用结构化的日志打印, 从速度上来说, zap 要比 logrus 快很多. zap 的官方案例中, 介绍了三种使用方式, 分别是
AdvancedConfiguration
BasicConfiguration
和Presets
本篇文章介绍 zap 包的 Presets 用法
Presets(预置函数) 是 zap 日志包最简单的用法, 不需要过多的自定义配置就可以用起来
NewExample
预置函数 NewExample 的源码定义如下
1 | func NewExample(options ...Option) *Logger { |
可以看到, 预置函数为我们配置了以上内容, 包括
- 各个字段的名称
- 日志级别的显示形式
- 时间编码类型
- 序列化时间的方式
- 输出到标准输出
- 以json形式打印
- 日志打印级别为Debug
NewExample
输出信息比较少, 打印内容比较详细, 一般用于开发时临时调试使用
1 | package main |
执行结果
1 | {"level":"info","msg":"Failed to fetch URL.","url":"http://example.com","attempt":3,"backoff":"1s"} |
NewDevelopment
预置函数 NewDevelopment 的源码定义如下
1 | func NewDevelopment(options ...Option) (*Logger, error) { |
NewDevelopment
打印内容比较详细(debug level), 输出格式为console
1 | package main |
执行结果
1 | 2020-03-17T22:52:45.665+0800 INFO log/l2.go:19 Failed to fetch URL. {"url": "http://example.com", "attempt": 3, "backoff": "1s"} |
NewProduction
源码如下
1 | func NewProduction(options ...Option) (*Logger, error) { |
NewProduction
的日志级别提高到了info level, 而且默认使用了结构化更友好的json格式输出日志, 该预置函数, 适用于生产环境, 程序上线后使用
1 | func main() { |
执行结果
1 | {"level":"info","ts":1584457473.942979,"caller":"log/l2.go:19","msg":"Failed to fetch URL.","url":"http://example.com","attempt":3,"backoff":1} |