在使用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