Explorar el Código

fix:完善Http客户端的错误日志信息

Jerry Liang hace 1 mes
padre
commit
61160f140b
Se han modificado 1 ficheros con 65 adiciones y 11 borrados
  1. 65 11
      service/utils/httpClient/httpClient.go

+ 65 - 11
service/utils/httpClient/httpClient.go

@@ -84,7 +84,11 @@ func (c *HttpClient) responseInterceptor(response *Response, retry func(*string)
 		tokenStr := (*c.reLogin)()
 		retryBody, err := retry(&tokenStr)
 		if err != nil {
-			zap.L().Warn("http retry 失败", zap.String("token", tokenStr), zap.String("err", err.Error()))
+			zap.L().Warn("http retry 失败(401 重新登录后重试)",
+				zap.Int("tokenLen", len(tokenStr)), // 避免明文记录 token,仅记录长度
+				zap.Int("originStatusCode", response.StatusCode),
+				zap.String("err", err.Error()),
+			)
 			return response
 		}
 		return retryBody
@@ -111,7 +115,11 @@ func (c *HttpClient) HttpGet(url string, params *url.Values, opt *HttpClientOpti
 		finalURL,
 		nil)
 	if err != nil {
-		zap.L().Error("NewRequest failed.", zap.String("err", err.Error()))
+		zap.L().Error("[HttpGet] NewRequest failed.",
+			zap.String("method", http.MethodGet),
+			zap.String("url", finalURL),
+			zap.String("err", err.Error()),
+		)
 		return nil, err
 	}
 
@@ -135,13 +143,24 @@ func (c *HttpClient) HttpGet(url string, params *url.Values, opt *HttpClientOpti
 		client := &http.Client{Timeout: timeout * time.Second}
 		resp, err := client.Do(req)
 		if err != nil {
-			zap.L().Error("Do Send failed.", zap.String("err", err.Error()))
+			zap.L().Error("[HttpGet] Do Send failed.",
+				zap.String("method", http.MethodGet),
+				zap.String("url", finalURL),
+				zap.Duration("timeout", timeout*time.Second),
+				zap.String("err", err.Error()),
+			)
 			return nil, err
 		}
 		defer resp.Body.Close()
 
 		respBody, err := io.ReadAll(resp.Body)
 		if err != nil {
+			zap.L().Error("[HttpGet] Read response body failed.",
+				zap.String("method", http.MethodGet),
+				zap.String("url", finalURL),
+				zap.String("status", resp.Status),
+				zap.String("err", err.Error()),
+			)
 			return nil, err
 		}
 
@@ -161,8 +180,14 @@ func (c *HttpClient) HttpGet(url string, params *url.Values, opt *HttpClientOpti
 
 	// 应答失败,直接返回
 	if response.StatusCode != 200 {
-		zap.L().Warn("[HttpGet] Response failed", zap.String("Status", response.Status), zap.String("Body", string(response.Body)))
-		return response, fmt.Errorf("[HttpGet] Response failed")
+		zap.L().Warn("[HttpGet] Response failed",
+			zap.String("method", http.MethodGet),
+			zap.String("url", finalURL),
+			zap.String("status", response.Status),
+			zap.Int("statusCode", response.StatusCode),
+			zap.String("body", string(response.Body)),
+		)
+		return response, fmt.Errorf("[HttpGet] Response failed, url=%s, status=%s", finalURL, response.Status)
 	}
 
 	return c.responseInterceptor(response, reqFunc), nil
@@ -211,11 +236,16 @@ func (c *HttpClient) HttpPost(url string, body any, opt *HttpClientOptions) (*Re
 	// 转换body数据
 	payload, err := toPostBody(body)
 	if err != nil {
-		zap.L().Error("to PostBody failed.", zap.String("err", err.Error()))
+		zap.L().Error("[HttpPost] to PostBody failed.",
+			zap.String("method", http.MethodPost),
+			zap.String("url", url),
+			zap.String("bodyType", fmt.Sprintf("%T", body)),
+			zap.String("err", err.Error()),
+		)
 		return nil, err
 	}
 
-	zap.L().Debug("HttpPost", zap.String("url", url))
+	zap.L().Debug("HttpPost", zap.String("url", url), zap.String("contentType", payload.ContentType))
 
 	// 创建请求
 	req, err := http.NewRequest(
@@ -223,7 +253,12 @@ func (c *HttpClient) HttpPost(url string, body any, opt *HttpClientOptions) (*Re
 		url,
 		payload.Reader)
 	if err != nil {
-		zap.L().Error("NewRequest failed.", zap.String("err", err.Error()))
+		zap.L().Error("[HttpPost] NewRequest failed.",
+			zap.String("method", http.MethodPost),
+			zap.String("url", url),
+			zap.String("contentType", payload.ContentType),
+			zap.String("err", err.Error()),
+		)
 		return nil, err
 	}
 
@@ -250,13 +285,25 @@ func (c *HttpClient) HttpPost(url string, body any, opt *HttpClientOptions) (*Re
 		client := &http.Client{Timeout: timeout * time.Second}
 		resp, err := client.Do(req)
 		if err != nil {
-			zap.L().Error("Do Send failed.", zap.String("err", err.Error()))
+			zap.L().Error("[HttpPost] Do Send failed.",
+				zap.String("method", http.MethodPost),
+				zap.String("url", url),
+				zap.String("contentType", payload.ContentType),
+				zap.Duration("timeout", timeout*time.Second),
+				zap.String("err", err.Error()),
+			)
 			return nil, err
 		}
 		defer resp.Body.Close()
 
 		respBody, err := io.ReadAll(resp.Body)
 		if err != nil {
+			zap.L().Error("[HttpPost] Read response body failed.",
+				zap.String("method", http.MethodPost),
+				zap.String("url", url),
+				zap.String("status", resp.Status),
+				zap.String("err", err.Error()),
+			)
 			return nil, err
 		}
 
@@ -275,8 +322,15 @@ func (c *HttpClient) HttpPost(url string, body any, opt *HttpClientOptions) (*Re
 
 	// 应答失败,直接返回
 	if response.StatusCode != 200 {
-		zap.L().Warn("[HttpPost] Response failed", zap.String("Status", response.Status), zap.String("Body", string(response.Body)))
-		return response, fmt.Errorf("[HttpPost] Response failed")
+		zap.L().Warn("[HttpPost] Response failed",
+			zap.String("method", http.MethodPost),
+			zap.String("url", url),
+			zap.String("contentType", payload.ContentType),
+			zap.String("status", response.Status),
+			zap.Int("statusCode", response.StatusCode),
+			zap.String("body", string(response.Body)),
+		)
+		return response, fmt.Errorf("[HttpPost] Response failed, url=%s, status=%s", url, response.Status)
 	}
 
 	return c.responseInterceptor(response, reqFunc), nil