Go-日志库Zap
什么是zap
- 快,非常快,这也是 zap 最显著的特点。速度快的原因是 zap 避免使用 
interface{} 和反射,并且使用 sync.Pool 减少堆内存分配。在 zap 面前 Logrus 的执行速度只有被吊打的份,你可以在官方 GitHub 仓库中看到 zap 与不同日志库的速度对比。 
- 支持结构化日志记录。这是一个优秀的日志库必备功能。
 
- 支持七种日志级别:
Debug、Info、Warn、Error、DPanic、Panic、Fatal,其中 DPanic 是指在开发环境下(development)记录日志后会进行 panic。 
- 支持输出调用堆栈。
 
- 支持 Hooks 机制。
 
安装
1
   | go get -u go.uber.org/zap
   | 
 
基础使用
// suger 模式会稍微比logger 原生慢一点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
   | 	logger, _ := zap.NewDevelopment() 	 	defer logger.Sync() 	sugar := logger.Sugar() 	sugar.Infow("failed to fetch URL", 		 		"url", "url", 		"attempt", 3, 		"backoff", time.Second, 	)
  	url:="www.piwriw.com" 	sugar.Info("failed  to fetch URL", 		zap.String("url",url), 		zap.Int("age",18), 	) 	sugar.Infof("Failed to fetch URL: %s", "url")
   | 
 
配置zap,logger路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
   | package main
  import ( 	"go.uber.org/zap" )
  func NewLogger() (*zap.Logger, error) { 	cfg := zap.NewProductionConfig() 	cfg.OutputPaths = []string{"./project.log", 		"stderr", 		"stdout"} 	return cfg.Build() } func main() { 	logger, err := NewLogger() 	if err != nil { 		panic(err) 	} 	sugar := logger.Sugar() 	defer sugar.Sync()
  }
   | 
 
整合到gin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
   | package middleware
  import "go.uber.org/zap"
  func InitLogger() {    logger, err := NewLogger()    if err != nil {       panic(err)    }    zap.ReplaceGlobals(logger) } func NewLogger() (*zap.Logger, error) {    cfg := zap.NewProductionConfig()    cfg.OutputPaths = []string{"./project.log",       "stderr",       "stdout"}    return cfg.Build() }
   |