99 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.8 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/logger"
 | ||
| 	"go.uber.org/zap"
 | ||
| 	"go.uber.org/zap/zapcore"
 | ||
| )
 | ||
| 
 | ||
| // NewGinLogger 使用gin框架记录日志
 | ||
| func NewGinLogger(loggerLevel logger.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实例
 | ||
| type Gin struct {
 | ||
| 	loggerInstance   *zap.Logger // zap 的日志实例
 | ||
| 	extractFieldList []string    // 从gin中抽取的字段
 | ||
| }
 | ||
| 
 | ||
| // formatFieldList 格式化日志field列表
 | ||
| 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 日志
 | ||
| func (gw *Gin) Debug(ctx context.Context, msg string, field ...zap.Field) {
 | ||
| 	fieldList := gw.formatFieldList(ctx, field)
 | ||
| 	gw.loggerInstance.Debug(msg, fieldList...)
 | ||
| }
 | ||
| 
 | ||
| // Info 日志
 | ||
| func (gw *Gin) Info(ctx context.Context, msg string, field ...zap.Field) {
 | ||
| 	fieldList := gw.formatFieldList(ctx, field)
 | ||
| 	gw.loggerInstance.Info(msg, fieldList...)
 | ||
| }
 | ||
| 
 | ||
| // Warn 日志
 | ||
| func (gw *Gin) Warn(ctx context.Context, msg string, field ...zap.Field) {
 | ||
| 	fieldList := gw.formatFieldList(ctx, field)
 | ||
| 	gw.loggerInstance.Warn(msg, fieldList...)
 | ||
| }
 | ||
| 
 | ||
| // Error 日志
 | ||
| func (gw *Gin) Error(ctx context.Context, msg string, field ...zap.Field) {
 | ||
| 	fieldList := gw.formatFieldList(ctx, field)
 | ||
| 	gw.loggerInstance.Error(msg, fieldList...)
 | ||
| }
 | ||
| 
 | ||
| // Panic 日志
 | ||
| func (gw *Gin) Panic(ctx context.Context, msg string, field ...zap.Field) {
 | ||
| 	fieldList := gw.formatFieldList(ctx, field)
 | ||
| 	gw.loggerInstance.Panic(msg, fieldList...)
 | ||
| }
 | ||
| 
 | ||
| // DPanic 日志
 | ||
| func (gw *Gin) DPanic(ctx context.Context, msg string, field ...zap.Field) {
 | ||
| 	fieldList := gw.formatFieldList(ctx, field)
 | ||
| 	gw.loggerInstance.DPanic(msg, fieldList...)
 | ||
| }
 | ||
| 
 | ||
| // GetZapLoggerInstance 获取zap日志实例
 | ||
| func (gw *Gin) GetZapLoggerInstance() *zap.Logger {
 | ||
| 	return gw.loggerInstance
 | ||
| }
 |