gopkg/logger/wrapper/http_gin.go

143 lines
3.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Package wrapper...
//
// Description : http_gin 使用gin框架时的记录日志
//
// Author : go_developer@163.com<张德满>
//
// Date : 2021-01-03 3:43 下午
package wrapper
import (
"encoding/json"
"github.com/gin-gonic/gin"
"github.com/go-developer/gopkg/logger"
logger2 "github.com/go-developer/gopkg/logger"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
// NewGinLogger 使用gin框架记录日志
//
// Author : go_developer@163.com<张德满>
//
// Date : 3:45 下午 2021/1/3
func NewGinLogger(loggerLevel zapcore.Level, consoleOutput bool, encoder zapcore.Encoder, splitConfig *logger.RotateLogConfig, extractFieldList []string, skip int) (*Gin, error) {
var (
err error
l *zap.Logger
)
logConfList := []logger2.SetLoggerOptionFunc{logger2.WithEncoder(encoder), logger2.WithCaller(), logger2.WithCallerSkip(skip)}
if consoleOutput {
logConfList = append(logConfList, logger2.WithConsoleOutput())
}
if l, err = logger.NewLogger(loggerLevel, splitConfig, logConfList...); nil != err {
return nil, err
}
return &Gin{
loggerInstance: l,
extractFieldList: extractFieldList,
}, nil
}
// Gin 包装gin实例
//
// Author : go_developer@163.com<张德满>
//
// Date : 3:59 下午 2021/1/3
type Gin struct {
loggerInstance *zap.Logger // zap 的日志实例
extractFieldList []string // 从gin中抽取的字段
}
// formatFieldList 格式化日志field列表
//
// Author : go_developer@163.com<张德满>
//
// Date : 4:13 下午 2021/1/3
func (gw *Gin) formatFieldList(ginCtx *gin.Context, inputFieldList []zap.Field) []zap.Field {
if nil == inputFieldList {
inputFieldList = make([]zap.Field, 0)
}
if nil != ginCtx {
// 自动扩充抽取字段,字段不存在的话,忽略掉
for _, extractField := range gw.extractFieldList {
if v, exist := ginCtx.Get(extractField); exist {
byteData, _ := json.Marshal(v)
inputFieldList = append(inputFieldList, zap.String(extractField, string(byteData)))
}
}
}
return inputFieldList
}
// Debug 日志
//
// Author : go_developer@163.com<张德满>
//
// Date : 4:14 下午 2021/1/3
func (gw *Gin) Debug(ginCtx *gin.Context, msg string, field ...zap.Field) {
fieldList := gw.formatFieldList(ginCtx, field)
gw.loggerInstance.Debug(msg, fieldList...)
}
// Info 日志
//
// Author : go_developer@163.com<张德满>
//
// Date : 4:28 下午 2021/1/3
func (gw *Gin) Info(ginCtx *gin.Context, msg string, field ...zap.Field) {
fieldList := gw.formatFieldList(ginCtx, field)
gw.loggerInstance.Info(msg, fieldList...)
}
// Warn 日志
//
// Author : go_developer@163.com<张德满>
//
// Date : 4:29 下午 2021/1/3
func (gw *Gin) Warn(ginCtx *gin.Context, msg string, field ...zap.Field) {
fieldList := gw.formatFieldList(ginCtx, field)
gw.loggerInstance.Warn(msg, fieldList...)
}
// Error 日志
//
// Author : go_developer@163.com<张德满>
//
// Date : 4:29 下午 2021/1/3
func (gw *Gin) Error(ginCtx *gin.Context, msg string, field ...zap.Field) {
fieldList := gw.formatFieldList(ginCtx, field)
gw.loggerInstance.Error(msg, fieldList...)
}
// Panic 日志
//
// Author : go_developer@163.com<张德满>
//
// Date : 4:29 下午 2021/1/3
func (gw *Gin) Panic(ginCtx *gin.Context, msg string, field ...zap.Field) {
fieldList := gw.formatFieldList(ginCtx, field)
gw.loggerInstance.Panic(msg, fieldList...)
}
// DPanic 日志
//
// Author : go_developer@163.com<张德满>
//
// Date : 4:30 下午 2021/1/3
func (gw *Gin) DPanic(ginCtx *gin.Context, msg string, field ...zap.Field) {
fieldList := gw.formatFieldList(ginCtx, field)
gw.loggerInstance.DPanic(msg, fieldList...)
}
// GetZapLoggerInstance 获取zap日志实例
//
// Author : go_developer@163.com<张德满>
//
// Date : 2021/01/03 22:56:47
func (gw *Gin) GetZapLoggerInstance() *zap.Logger {
return gw.loggerInstance
}