Golang:zap日志库学习

596 阅读1分钟

直接核心代码

package main

import (
   "fmt"
   "github.com/natefinch/lumberjack"
   "go.uber.org/zap"
   "go.uber.org/zap/zapcore"
   "net/http"
)

var sugarLogger *zap.SugaredLogger

func main() {
   InitLogger()
   defer sugarLogger.Sync()
   for i := 0; i < 1000000; i++ {
      fmt.Println(i)
      simpleHttpGet("www.google.com")
      simpleHttpGet("http://www.baidu.com")
   }
}

func InitLogger() {
   writeSyncer := getLogWriter()
   encoder := getEncoder()
   core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)
   // zap.AddCaller() 该配置可以增加 代码行号 看是哪个位置打印的
   logger := zap.New(core, zap.AddCaller())
   sugarLogger = logger.Sugar()
}

func simpleHttpGet(url string) {
   sugarLogger.Debugf("Trying to hit GET request for %s", url)
   sugarLogger.Debugf("Trying to hit GET request for %s", url)
   resp, err := http.Get(url)
   if err != nil {
      sugarLogger.Errorf("Error fetching url %s.. Error : %s", url, err)
      sugarLogger.Errorf("Error fetching url %s.. Error : %s", url, err)
   } else {
      sugarLogger.Infof("Success..! statusCode = %s for url %s", resp.Status, url)
      sugarLogger.Infof("Success..! statusCode = %s for url %s", resp.Status, url)
      _ = resp.Body.Close()
   }
}

func getLogWriter() zapcore.WriteSyncer {
   //Zap本身不支持切割归档日志文件 使用第三方库 Lumberjack进行切割
   lumberjackLogger := &lumberjack.Logger{
      // 文件路径
      Filename: "./test.log",
      // 日志最大保存
      MaxSize: 1,
      // 文件保留最大数量
      MaxBackups: 5,
      // 最大保留天数
      MaxAge:   30,
      Compress: false,
      // 使用本地时间命名 默认为utc时间命名
      LocalTime: true,
   }
   //file, _ := os.Create("./test.log")
   return zapcore.AddSync(lumberjackLogger)
}

func getEncoder() zapcore.Encoder {
   encoderConfig := zap.NewProductionEncoderConfig()
   // 将时间戳变更为 2006-01-02 15:04:05
   encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
   // 将输出等级转为大写 info -> INFO
   encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
   return zapcore.NewConsoleEncoder(encoderConfig)
}