1. 安装和基本使用

  1. go get -u go.uber.org/zap
  1. package main
  2. import (
  3. "go.uber.org/zap"
  4. )
  5. func main() {
  6. logger, _ := zap.NewProduction()
  7. defer logger.Sync() // flushes buffer, if any
  8. url := "https://imooc.com"
  9. sugar := logger.Sugar()
  10. sugar.Infow("failed to fetch URL",
  11. // Structured context as loosely typed key-value pairs.
  12. "url", url,
  13. "attempt", 3,
  14. )
  15. sugar.Infof("Failed to fetch URL: %s", url)
  16. }

Zap提供了两种类型的日志记录器—Sugared LoggerLogger
在性能很好但不是很关键的上下文中,使用SugaredLogger。它比其他结构化日志记录包快4-10倍,并且支持结构化和printf风格的日志记录。
在每一微秒和每一次内存分配都很重要的上下文中,使用Logger。它甚至比SugaredLogger更快,内存分配次数也更少,但它只支持强类型的结构化日志记录

2. 写入日志文件

  1. package main
  2. import (
  3. "go.uber.org/zap"
  4. "time"
  5. )
  6. func NewLogger() (*zap.Logger, error) {
  7. cfg := zap.NewProductionConfig()
  8. cfg.OutputPaths = []string{
  9. "./myproject.log",
  10. }
  11. return cfg.Build()
  12. }
  13. func main() {
  14. //logger, _ := zap.NewProduction()
  15. logger, err := NewLogger()
  16. if err != nil {
  17. panic(err)
  18. //panic("初始化logger失败")
  19. }
  20. su := logger.Sugar()
  21. defer su.Sync()
  22. url := "https://imooc.com"
  23. su.Info("failed to fetch URL",
  24. // Structured context as strongly typed Field values.
  25. zap.String("url", url),
  26. zap.Int("attempt", 3),
  27. zap.Duration("backoff", time.Second),
  28. )
  29. }