From df6a51ae6213380aff955d9d890f2705b7efc888 Mon Sep 17 00:00:00 2001 From: Mrx <18278715334@163.com> Date: Sat, 21 Mar 2026 18:36:42 +0800 Subject: [PATCH] f --- internal/container/container.go | 7 +-- .../external/alicloud/alicloud_factory.go | 49 +++++++++++++++++++ .../external/alicloud/alicloud_service.go | 45 ++++++++++++++++- 3 files changed, 95 insertions(+), 6 deletions(-) create mode 100644 internal/infrastructure/external/alicloud/alicloud_factory.go diff --git a/internal/container/container.go b/internal/container/container.go index 451a843..dce5338 100644 --- a/internal/container/container.go +++ b/internal/container/container.go @@ -412,11 +412,8 @@ func NewContainer() *Container { ) }, // AlicloudService - 阿里云服务 - func(cfg *config.Config) *alicloud.AlicloudService { - return alicloud.NewAlicloudService( - cfg.Alicloud.Host, - cfg.Alicloud.AppCode, - ) + func(cfg *config.Config) (*alicloud.AlicloudService, error) { + return alicloud.NewAlicloudServiceWithConfig(cfg) }, sharedhttp.NewGinRouter, ipgeo.NewLocator, diff --git a/internal/infrastructure/external/alicloud/alicloud_factory.go b/internal/infrastructure/external/alicloud/alicloud_factory.go new file mode 100644 index 0000000..9259174 --- /dev/null +++ b/internal/infrastructure/external/alicloud/alicloud_factory.go @@ -0,0 +1,49 @@ +package alicloud + +import ( + "tyapi-server/internal/config" + "tyapi-server/internal/shared/external_logger" +) + +// NewAlicloudServiceWithConfig 使用配置创建阿里云服务,并启用外部服务调用日志 +func NewAlicloudServiceWithConfig(cfg *config.Config) (*AlicloudService, error) { + loggingConfig := external_logger.ExternalServiceLoggingConfig{ + Enabled: true, + LogDir: "./logs/external_services", + ServiceName: "alicloud", + UseDaily: false, + EnableLevelSeparation: true, + LevelConfigs: map[string]external_logger.ExternalServiceLevelFileConfig{ + "info": { + MaxSize: 100, + MaxBackups: 3, + MaxAge: 28, + Compress: true, + }, + "error": { + MaxSize: 100, + MaxBackups: 3, + MaxAge: 28, + Compress: true, + }, + "warn": { + MaxSize: 100, + MaxBackups: 3, + MaxAge: 28, + Compress: true, + }, + }, + } + + logger, err := external_logger.NewExternalServiceLogger(loggingConfig) + if err != nil { + return nil, err + } + + return NewAlicloudService( + cfg.Alicloud.Host, + cfg.Alicloud.AppCode, + logger, + ), nil +} + diff --git a/internal/infrastructure/external/alicloud/alicloud_service.go b/internal/infrastructure/external/alicloud/alicloud_service.go index 86e5fdc..bfd852d 100644 --- a/internal/infrastructure/external/alicloud/alicloud_service.go +++ b/internal/infrastructure/external/alicloud/alicloud_service.go @@ -1,6 +1,7 @@ package alicloud import ( + "crypto/md5" "errors" "fmt" "io" @@ -8,6 +9,8 @@ import ( "net/url" "strings" "time" + + "tyapi-server/internal/shared/external_logger" ) var ( @@ -24,25 +27,47 @@ type AlicloudConfig struct { // AlicloudService 阿里云服务 type AlicloudService struct { config AlicloudConfig + logger *external_logger.ExternalServiceLogger } // NewAlicloudService 创建阿里云服务实例 -func NewAlicloudService(host, appCode string) *AlicloudService { +func NewAlicloudService(host, appCode string, logger ...*external_logger.ExternalServiceLogger) *AlicloudService { + var serviceLogger *external_logger.ExternalServiceLogger + if len(logger) > 0 { + serviceLogger = logger[0] + } return &AlicloudService{ config: AlicloudConfig{ Host: host, AppCode: appCode, }, + logger: serviceLogger, } } +// generateRequestID 生成请求ID +func (a *AlicloudService) generateRequestID() string { + timestamp := time.Now().UnixNano() + hash := md5.Sum([]byte(fmt.Sprintf("%d_%s", timestamp, a.config.Host))) + return fmt.Sprintf("alicloud_%x", hash[:8]) +} + // CallAPI 调用阿里云API的通用方法 // path: API路径(如 "api-mall/api/id_card/check") // params: 请求参数 func (a *AlicloudService) CallAPI(path string, params map[string]interface{}) (respBytes []byte, err error) { + startTime := time.Now() + requestID := a.generateRequestID() + transactionID := "" + // 构建请求URL reqURL := a.config.Host + "/" + path + // 记录请求日志 + if a.logger != nil { + a.logger.LogRequest(requestID, transactionID, path, reqURL) + } + // 构建请求参数 formData := url.Values{} for key, value := range params { @@ -52,6 +77,9 @@ func (a *AlicloudService) CallAPI(path string, params map[string]interface{}) (r // 创建HTTP请求 req, err := http.NewRequest("POST", reqURL, strings.NewReader(formData.Encode())) if err != nil { + if a.logger != nil { + a.logger.LogError(requestID, transactionID, path, errors.Join(ErrSystem, err), params) + } return nil, fmt.Errorf("%w: %s", ErrSystem, err.Error()) } @@ -78,8 +106,14 @@ func (a *AlicloudService) CallAPI(path string, params map[string]interface{}) (r } if isTimeout { + if a.logger != nil { + a.logger.LogError(requestID, transactionID, path, errors.Join(ErrDatasource, fmt.Errorf("API请求超时: %s", err.Error())), params) + } return nil, fmt.Errorf("%w: API请求超时: %s", ErrDatasource, err.Error()) } + if a.logger != nil { + a.logger.LogError(requestID, transactionID, path, errors.Join(ErrSystem, err), params) + } return nil, fmt.Errorf("%w: %s", ErrSystem, err.Error()) } defer resp.Body.Close() @@ -87,9 +121,18 @@ func (a *AlicloudService) CallAPI(path string, params map[string]interface{}) (r // 读取响应体 body, err := io.ReadAll(resp.Body) if err != nil { + if a.logger != nil { + a.logger.LogError(requestID, transactionID, path, errors.Join(ErrSystem, err), params) + } return nil, fmt.Errorf("%w: %s", ErrSystem, err.Error()) } + // 记录响应日志(不记录具体响应数据) + if a.logger != nil { + duration := time.Since(startTime) + a.logger.LogResponse(requestID, transactionID, path, resp.StatusCode, duration) + } + // 直接返回原始响应body,让调用方自己处理 return body, nil }