2025-05-22 15:43:14 +08:00

141 lines
4.1 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 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" // 系统红包
LogTypeActivity LogType = "activity" // 活动
)
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)
}
}