package log import ( "context" "fmt" "github.com/dromara/carbon/v2" "github.com/gogf/gf/v2/frame/g" "go.uber.org/zap" ) type LogType = string const ( LogTypeOrder LogType = "order" // 订单 LogTypeProduct LogType = "product" // 商品 LogTypeMerchant LogType = "merchant" // 商家 LogTypeMerchantRedPack LogType = "merchant_red_pack" // 商家红包 LogTypePay LogType = "pay" // 支付 LogTypeUser LogType = "user" // 用户 LogTypeUserRedPack LogType = "user_red_pack" // 用户红包 LogTypeGPS LogType = "gps" // gps LogTypeSMS LogType = "sms" // 短信 LogTypeIP LogType = "ip" // ip信息 LogTypeAdmin LogType = "admin" // 管理员操作,例如登录、退出、修改密码、修改用户信息、修改角色信息、审核等 LogTypeSystem LogType = "system" // 系统、日志、定时任务初始化、定时任务、mq初始化等 LogTypeSystemRedPack LogType = "system_red_pack" // 系统红包 ) type LogInfo struct { LogType LogType `json:"log_type"` // 日志类型,按被操作对象划分 Operator *Operator `json:"operator,omitempty"` // 操作人,系统操作不用填写操作人,写日志类型就可以 ObjectorID int `json:"objector_id,omitempty"` // 被操作对象ID,如果是gps,短信等服务则为0 Title string `json:"title"` // 必填,标题,做什么事情 Param interface{} `json:"param,omitempty"` // 参数,请求参数,传指针 Result interface{} `json:"result,omitempty"` // 结果,返回值,传指针,如果是报错,传err ErrStr string `json:"err_str,omitempty"` // 错误信息,不用传入,自动记录 At string `json:"at"` // 记录时间,不用传入,自动记录 } type OperatorType = string const ( OperatorTypeAdmin OperatorType = "admin" // 管理员 OperatorTypeMerchant OperatorType = "merchant" // 商家 OperatorTypeUser OperatorType = "user" // 用户 ) type Operator struct { ID int // 系统ID设置0 OperatorType OperatorType } func ZapDebug(logger *zap.Logger, log *LogInfo) { handleLog(log) logger.Debug("", zap.Any("log", log)) } func ZapInfo(logger *zap.Logger, log *LogInfo) { handleLog(log) logger.Info("", zap.Any("log", log)) } func ZapWarn(logger *zap.Logger, log *LogInfo) { handleLog(log) logger.Warn("", zap.Any("log", log)) } func ZapError(logger *zap.Logger, log *LogInfo) { handleLog(log) logger.Error("", zap.Any("log", log)) } func ZapPanic(logger *zap.Logger, log *LogInfo) { handleLog(log) logger.Panic("", zap.Any("log", log)) } func ZapFatal(logger *zap.Logger, log *LogInfo) { handleLog(log) logger.Fatal("", zap.Any("log", log)) } func handleLog(log *LogInfo) { log.At = carbon.Now().ToDateTimeString() if _, ok := log.Result.(error); ok { log.ErrStr = fmt.Sprintf("%+v", log.Result) log.Result = nil } } func GFInfo(ctx context.Context, log *LogInfo) { handleLog(log) g.Log().Info(ctx, log) } func GFWarning(ctx context.Context, log *LogInfo) { handleLog(log) g.Log().Warning(ctx, log) } func GFError(ctx context.Context, log *LogInfo) { handleLog(log) g.Log().Error(ctx, log) } func GFDebug(ctx context.Context, log *LogInfo) { handleLog(log) g.Log().Debug(ctx, log) } func GFPanic(ctx context.Context, log *LogInfo) { handleLog(log) g.Log().Panic(ctx, log) } func GFFatal(ctx context.Context, log *LogInfo) { handleLog(log) g.Log().Fatal(ctx, log) } func (l *LogInfo) GFCommonHandelResult(ctx context.Context, result interface{}, err error) { if err != nil { l.Result = err GFError(ctx, l) } else { l.Result = result GFInfo(ctx, l) } } func (l *LogInfo) ZapCommonHandelResult(logger *zap.Logger, result interface{}, err error) { if err != nil { l.Result = err ZapError(logger, l) } else { l.Result = result ZapInfo(logger, l) } }