Zap簡單使用


前言

zap 是 uber 開源的一個日志記錄的包, uber 在 go 的領域建樹頗多, zap 更是優秀, 相比於自帶的 log ,他有更多的功能, 當然, 最顯眼的還是他很快, 本文介紹 zap 模塊的基本使用

正文

zap的使用由 編碼器 和 初始化 組成, 編碼器表示輸出的格式, DEMO如下(使用默認的編碼器)

package tool

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

// Log zapLog對象
var Log *zap.Logger

Log, _ = zap.NewProduction()

使用方法為直接調用生成的 Log, 比如

	_, err := tools.DB.Exec(sqlStr, formPassWord, time.Now(), formPhone)
	if err != nil {
		tools.Log.Error("1002", zap.Error(err))  // log
		tools.FormatError(c, 1002, "error")
		return
	}

將日志保存在本地

如果項目有日志服務進行日志收集那么到這里就結束了, 如果需要將日志寫在本地你還需要看下去

我們使用第三方包來達到這個效果

lumberjack

該包可以自己進行日志的切割, 避免日志推擠過多, 當然你不需要日志切割等高級功能的話你完全可以直接使用 os.Create 來適配

結合 zap 使用如下

package tools

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

// Log zapLog對象
var Log *zap.Logger

// 日志切割設置
func getLogWriter() zapcore.WriteSyncer {
	lumberJackLogger := &lumberjack.Logger{
		Filename:   "api.log", // 日志文件位置
		MaxSize:    10,         // 日志文件最大大小(MB)
		MaxBackups: 5,          // 保留舊文件最大數量
		MaxAge:     30,         // 保留舊文件最長天數
		Compress:   false,      // 是否壓縮舊文件
	}
	return zapcore.AddSync(lumberJackLogger)
}

// 編碼器
func getEncoder() zapcore.Encoder {
	// 使用默認的JSON編碼
	encoderConfig := zap.NewProductionEncoderConfig()
	encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
	encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
	return zapcore.NewJSONEncoder(encoderConfig)
}

// InitLogger 初始化Logger
func InitLogger() {
	writeSyncer := getLogWriter()
	encoder := getEncoder()
	core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)

	Log = zap.New(core, zap.AddCaller())
}

使用方法與上方一致

Log.Error 代表生成一條 Error 的log, 參數一是 msg 內容, 這個是自定義的, 根據團隊的規范來, 參數二是 err 信息, 使用 zap.Error 包裝可生成額外的信息比如報錯的路徑/文件/行 等信息, 輸出的日志類似

{"level":"ERROR","ts":"2020-04-19T12:38:14.587+0800","caller":"property/view.go:464","msg":"1002","error":"Error 1054: Unknown column 'propertyid' in 'on clause'"}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM