logger/wrapper/http_gin.go

139 lines
3.6 KiB
Go
Raw Permalink 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 (
"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
}