139 lines
3.6 KiB
Go
139 lines
3.6 KiB
Go
// Package wrapper...
|
||
//
|
||
// Description : http_gin 使用gin框架时的,记录日志
|
||
//
|
||
// Author : go_developer@163.com<白茶清欢>
|
||
//
|
||
// Date : 2021-01-03 3:43 下午
|
||
package wrapper
|
||
|
||
import (
|
||
"context"
|
||
"git.zhangdeman.cn/zhangdeman/consts"
|
||
"git.zhangdeman.cn/zhangdeman/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 consts.LogLevel, consoleOutput bool, encoder zapcore.Encoder, splitConfig *logger.RotateLogConfig, extractFieldList []string, skip int) (*Gin, error) {
|
||
var (
|
||
err error
|
||
l *zap.Logger
|
||
)
|
||
logConfList := []logger.SetLoggerOptionFunc{logger.WithEncoder(encoder), logger.WithCaller(), logger.WithCallerSkip(skip)}
|
||
if consoleOutput {
|
||
logConfList = append(logConfList, logger.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(ctx context.Context, inputFieldList []zap.Field) []zap.Field {
|
||
if nil == ctx {
|
||
ctx = context.Background()
|
||
}
|
||
if nil == inputFieldList {
|
||
inputFieldList = make([]zap.Field, 0)
|
||
}
|
||
// 自动扩充抽取字段,字段不存在的话,忽略掉
|
||
for _, extractField := range gw.extractFieldList {
|
||
inputFieldList = append(inputFieldList, zap.Any(extractField, ctx.Value(extractField)))
|
||
}
|
||
return inputFieldList
|
||
}
|
||
|
||
// Debug 日志
|
||
//
|
||
// Author : go_developer@163.com<白茶清欢>
|
||
//
|
||
// Date : 4:14 下午 2021/1/3
|
||
func (gw *Gin) Debug(ctx context.Context, msg string, field ...zap.Field) {
|
||
fieldList := gw.formatFieldList(ctx, field)
|
||
gw.loggerInstance.Debug(msg, fieldList...)
|
||
}
|
||
|
||
// Info 日志
|
||
//
|
||
// Author : go_developer@163.com<白茶清欢>
|
||
//
|
||
// Date : 4:28 下午 2021/1/3
|
||
func (gw *Gin) Info(ctx context.Context, msg string, field ...zap.Field) {
|
||
fieldList := gw.formatFieldList(ctx, field)
|
||
gw.loggerInstance.Info(msg, fieldList...)
|
||
}
|
||
|
||
// Warn 日志
|
||
//
|
||
// Author : go_developer@163.com<白茶清欢>
|
||
//
|
||
// Date : 4:29 下午 2021/1/3
|
||
func (gw *Gin) Warn(ctx context.Context, msg string, field ...zap.Field) {
|
||
fieldList := gw.formatFieldList(ctx, field)
|
||
gw.loggerInstance.Warn(msg, fieldList...)
|
||
}
|
||
|
||
// Error 日志
|
||
//
|
||
// Author : go_developer@163.com<白茶清欢>
|
||
//
|
||
// Date : 4:29 下午 2021/1/3
|
||
func (gw *Gin) Error(ctx context.Context, msg string, field ...zap.Field) {
|
||
fieldList := gw.formatFieldList(ctx, field)
|
||
gw.loggerInstance.Error(msg, fieldList...)
|
||
}
|
||
|
||
// Panic 日志
|
||
//
|
||
// Author : go_developer@163.com<白茶清欢>
|
||
//
|
||
// Date : 4:29 下午 2021/1/3
|
||
func (gw *Gin) Panic(ctx context.Context, msg string, field ...zap.Field) {
|
||
fieldList := gw.formatFieldList(ctx, field)
|
||
gw.loggerInstance.Panic(msg, fieldList...)
|
||
}
|
||
|
||
// DPanic 日志
|
||
//
|
||
// Author : go_developer@163.com<白茶清欢>
|
||
//
|
||
// Date : 4:30 下午 2021/1/3
|
||
func (gw *Gin) DPanic(ctx context.Context, msg string, field ...zap.Field) {
|
||
fieldList := gw.formatFieldList(ctx, 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
|
||
}
|