// Package log ... // // Description : httpclient ... // // Author : go_developer@163.com<白茶清欢> // // Date : 2025-03-31 18:02 package log import ( "context" "git.zhangdeman.cn/zhangdeman/consts" "git.zhangdeman.cn/zhangdeman/network/httpclient/define" "go.uber.org/zap" ) var ( logger *zap.Logger ) // Set 设置日志实例 // // Author : go_developer@163.com<白茶清欢> // // Date : 18:02 2025/3/31 func Set(l *zap.Logger) { logger = l } // Get 获取日志实例 // // Author : go_developer@163.com<白茶清欢> // // Date : 18:19 2025/3/31 func Get() *zap.Logger { if nil == logger { // 返回日志空实现 return zap.NewNop() } return logger } var buildHttpLogDataFunc BuildHttpLogDataFunc // BuildHttpLogDataFunc 构建http请求日志数据的方法 type BuildHttpLogDataFunc func(ctx context.Context, isResponseLog bool, businessData map[string]any, reqCfg *define.Request, response *define.Response) []zap.Field func SetBuildDataFunc(f BuildHttpLogDataFunc) { buildHttpLogDataFunc = f } func GetBuildDataFunc() BuildHttpLogDataFunc { return buildHttpLogDataFunc } // Record 日志记录 // // Author : go_developer@163.com<白茶清欢> // // Date : 18:07 2025/3/31 func Record(ctx context.Context, logInstance *zap.Logger, level consts.LogLevel, msg string, reqCfg *define.Request, response *define.Response) { if nil == logInstance { // 未设置日志实例 return } buildDataFunc := GetBuildDataFunc() if nil == buildDataFunc { // 未设置构建日志数据的方法 return } fields := buildDataFunc(ctx, true, nil, reqCfg, response) switch level { case consts.LogLevelDebug: logInstance.Debug(msg, fields...) case consts.LogLevelInfo: logInstance.Info(msg, fields...) case consts.LogLevelWarn: logInstance.Warn(msg, fields...) case consts.LogLevelError: logInstance.Error(msg, fields...) case consts.LogLevelPanic: logInstance.Panic(msg, fields...) } } // RecordDebug 日志记录 func RecordDebug(msg string, businessData map[string]any, reqCfg *define.Request) { if nil == reqCfg.Logger { // 未设置日志实例 return } buildDataFunc := GetBuildDataFunc() if nil == buildDataFunc { // 未设置构建日志数据的方法 return } fields := buildDataFunc(reqCfg.Ctx, false, businessData, reqCfg, nil) reqCfg.Logger.Debug(msg, fields...) } // RecordInfo ... func RecordInfo(msg string, businessData map[string]any, reqCfg *define.Request) { if nil == reqCfg.Logger { // 未设置日志实例 return } buildDataFunc := GetBuildDataFunc() if nil == buildDataFunc { // 未设置构建日志数据的方法 return } fields := buildDataFunc(reqCfg.Ctx, false, businessData, reqCfg, nil) reqCfg.Logger.Info(msg, fields...) } // RecordWarn ... func RecordWarn(msg string, businessData map[string]any, reqCfg *define.Request) { if nil == reqCfg.Logger { // 未设置日志实例 return } buildDataFunc := GetBuildDataFunc() if nil == buildDataFunc { // 未设置构建日志数据的方法 return } fields := buildDataFunc(reqCfg.Ctx, false, businessData, reqCfg, nil) reqCfg.Logger.Warn(msg, fields...) } // RecordError ... func RecordError(msg string, businessData map[string]any, reqCfg *define.Request) { if nil == reqCfg.Logger { // 未设置日志实例 return } buildDataFunc := GetBuildDataFunc() if nil == buildDataFunc { // 未设置构建日志数据的方法 return } fields := buildDataFunc(reqCfg.Ctx, false, businessData, reqCfg, nil) reqCfg.Logger.Error(msg, fields...) }