天天看點

Go Zap日志庫的基礎使用

在使用go語言開發項目的過程中,必不可少的需要記錄程式在運作過程中的日志,這不僅僅能幫助我們快速定位bug,也可以幫助我們實作程式調優,下面就簡單介紹一下我自己用過的日志記錄第三方庫go.uber.org/zap

一、導入第三方庫

go get -u go.uber.org/zap
           

二、使用

package main

import (
	"fmt"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
	"os"
)

//聲明日志類全局變量
var logger *zap.Logger
func main(){
	//執行個體化日志類
	InitLogger()
	//使用日志方法
	logger.Debug("調試日志",zap.String("code","200"))
	logger.Fatal("失敗日志",zap.String("code","200"))
	logger.Info("詳情日志",zap.String("code","200"),zap.String("data","gangan"))
	logger.Error("錯誤記錄",zap.String("code","200"),zap.String("data","gangan"))
	//logger.Panic("系統錯誤日志",zap.String("code","200"),zap.String("data","gangan"))
	fmt.Println(123)
}

//日志類初始化方法
func InitLogger() {
	//需要将日志寫入什麼地方
	writeSyncer := getLogWriter()
	//日志編碼方式
	encoder := getEncoder()
	//傳入參數進行執行個體化,最後一個參數為日志記錄級别,當日志級别小于目前級别時,不寫入日志檔案
	core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)
	logger = zap.New(core, zap.AddCaller())
}
//日志編碼方式
func getEncoder() zapcore.Encoder {
	encoderConfig := zap.NewProductionEncoderConfig()
	encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
	encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
	return zapcore.NewConsoleEncoder(encoderConfig)
}
//日志記錄位址
func getLogWriter() zapcore.WriteSyncer {
	//定義日志檔案名,設定權限,當日志檔案不存在時建立檔案
	file, err := os.OpenFile("./text.log",os.O_CREATE|os.O_APPEND,0777)
	if err != nil{
		fmt.Printf("打開檔案資源失敗 err:%v",err)
	}
	return zapcore.AddSync(file)
}
           

輸出

2020-04-24T12:41:30.005+0800	DEBUG	log.zozoo.net/index.go:17	調試日志	{"code": "200"}
2020-04-24T12:41:30.071+0800	FATAL	log.zozoo.net/index.go:19	失敗日志	{"code": "200"}
           
更多使用參考官網

https://github.com/uber-go/zap