安装
go get -u go.uber.org/zap
使用
package main
import (
"go.uber.org/zap"
)
func main() {
logger, _ := zap.NewProduction() // 生产环境
//logger, _ := zap.NewDevelopment()
defer logger.Sync() // flushes buffer, if any
url := "https://imooc.com"
//logger.Info("failed to fetch URL",
// zap.String("url", url),
// zap.Int("nums", 3))
sugar := logger.Sugar()
sugar.Infow("failed to fetch URL",
// Structured context as loosely typed key-value pairs.
"url", url,
"attempt", 3,
)
sugar.Infof("Failed to fetch URL: %s", url)
}
Zap提供了两种类型的日志记录器—Sugared Logger
和Logger
。
在性能很好但不是很关键的上下文中,使用SugaredLogger
。它比其他结构化日志记录包快4-10倍,并且支持结构化和printf风格的日志记录。
在每一微秒和每一次内存分配都很重要的上下文中,使用Logger
。它甚至比SugaredLogger
更快,内存分配次数也更少,但它只支持强类型的结构化日志记录
日志写入文件
package main
import (
"go.uber.org/zap"
)
func main() {
logger, _ := zap.NewProduction() // 生产环境
//logger, _ := zap.NewDevelopment()
defer logger.Sync() // flushes buffer, if any
url := "https://imooc.com"
//logger.Info("failed to fetch URL",
// zap.String("url", url),
// zap.Int("nums", 3))
sugar := logger.Sugar()
sugar.Infow("failed to fetch URL",
// Structured context as loosely typed key-value pairs.
"url", url,
"attempt", 3,
)
sugar.Infof("Failed to fetch URL: %s", url)
}