Files
logger/wrapper/http_gin.go
2025-10-31 12:29:01 +08:00

99 lines
2.8 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 (
"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
}