(7)go-micro微服務zap日誌配置

qi66發表於2023-01-11

一 Zap日誌介紹

  • Zap是在 Go 中實現超快、結構化、分級的日誌記錄。

  • Zap日誌能夠提供下面這些功能:

  1、能夠將事件記錄到檔案中,也可以在應用控制檯輸出

  2、日誌切割-可以根據檔案大小,時間或間隔來切割日誌檔案

  3、支援不同的日誌級別。例如 INFO、DEBUG、ERROR等

  4、能夠列印基本資訊,如呼叫檔案/函式名和行號,日誌時間等。

  • zap的基本配置
    • Zap提供了兩種型別的日誌記錄器—Sugared Logger 和 Logger 。

      在效能很好但不是很關鍵的上下文中,使用 SugaredLogger 。它比其他結構化日誌記錄包快4-10倍,並且支援結構化和printf風格的日誌記錄。

      在每一微秒和每一次記憶體分配都很重要的上下文中,使用 Logger 。它甚至比 SugaredLogger 更快,記憶體分配次數也更少,但它只支援強型別的結構化日誌記錄。

二 Zap日誌安裝

go get -u go.uber.org/zap
go get -u go.uber.org/zapcore
go get -u gopkg.in/natefinch/lumberjack.v2
  • 使用lumberjack進行日誌劃分

三 Zap日誌初始化

  • 在logger目錄下新建zap.go檔案
package logger

import (
   "account/common/micro"
   "go.uber.org/zap"
   "go.uber.org/zap/zapcore"
   "gopkg.in/natefinch/lumberjack.v2"
)

var (
   logger *zap.SugaredLogger
)

func Init() error {
   syncWriter := zapcore.AddSync(
      &lumberjack.Logger{
         Filename:   micro.ConsulInfo.Log.Filename,     //檔名稱
         MaxSize:    int(micro.ConsulInfo.Log.MaxSize), //MB
         MaxAge:     int(micro.ConsulInfo.Log.MaxAge),
         MaxBackups: int(micro.ConsulInfo.Log.MaxBackips), //最大備份
         LocalTime:  true,
         Compress:   true, //是否啟用壓縮
      })
   //編碼
   encoder := zap.NewProductionEncoderConfig()
   //時間格式
   encoder.EncodeTime = zapcore.ISO8601TimeEncoder
   core := zapcore.NewCore(
      // 編碼器
      zapcore.NewJSONEncoder(encoder),
      syncWriter,
      //
      zap.NewAtomicLevelAt(zap.DebugLevel))
   log := zap.New(
      core,
      zap.AddCaller(),
      zap.AddCallerSkip(1))
   logger = log.Sugar()
   return nil
}

四 Zap日誌重寫方法

  • 在zap.go寫入以下程式碼:
func Debug(args ...interface{}) {
   logger.Debug(args)
}

func Debugf(template string, args ...interface{}) {
   logger.Debugf(template, args...)
}

func Info(args ...interface{}) {
   logger.Info(args...)
}

func Infof(template string, args ...interface{}) {
   logger.Infof(template, args...)
}

func Warn(args ...interface{}) {
   logger.Warn(args...)
}

func Warnf(template string, args ...interface{}) {
   logger.Warnf(template, args...)
}

func Error(args ...interface{}) {
   logger.Error(args...)
}

func Errorf(template string, args ...interface{}) {
   logger.Errorf(template, args...)
}

func DPanic(args ...interface{}) {
   logger.DPanic(args...)
}

func DPanicf(template string, args ...interface{}) {
   logger.DPanicf(template, args...)
}

func Panic(args ...interface{}) {
   logger.Panic(args...)
}

func Panicf(template string, args ...interface{}) {
   logger.Panicf(template, args...)
}

func Fatal(args ...interface{}) {
   logger.Fatal(args...)
}

func Fatalf(template string, args ...interface{}) {
   logger.Fatalf(template, args...)
}

五 Zap日誌使用

  • 在main.go檔案寫入以下程式碼完成初始化:
// 4.zap日誌初始化
if err := logger.Init(); err != nil {
   fmt.Printf("Init logger failed, err: %v\n", err)
   return
}
defer zap.L().Sync()

使用logger進行日誌記錄,如:logger.Info()

六 最後

  • 至此,go-micro微服務zap日誌配置開發工作就正式完成。

  • 接下來就開始Mysql配置的程式碼編寫了,希望大家關注博主和關注專欄,第一時間獲取最新內容,每篇部落格都乾貨滿滿。

歡迎大家加入 夏沫の夢的學習交流群 進行學習交流經驗,點選 夏沫の夢學習交流

相關文章