Skip to content

Commit 8c29186

Browse files
committed
Refactor error handling and logging in httpclient package
1 parent cc5530b commit 8c29186

File tree

5 files changed

+9
-13
lines changed

5 files changed

+9
-13
lines changed

httpclient/httpclient_error_response.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"fmt"
88
"io"
99
"net/http"
10-
"runtime/debug"
1110
"strings"
1211

1312
"github.com/deploymenttheory/go-api-http-client/logger"
@@ -49,20 +48,17 @@ func handleAPIErrorResponse(resp *http.Response, log logger.Logger) *APIError {
4948
return apiError
5049
}
5150

52-
stackTrace := string(debug.Stack())
53-
5451
// Check if the response is JSON
5552
if isJSONResponse(resp) {
5653
// Attempt to parse the response into a StructuredError
5754
if err := json.Unmarshal(bodyBytes, &apiError); err == nil && apiError.Message != "" {
58-
stackTrace := string(debug.Stack())
5955
log.LogError(
6056
"json_structured_error_detected", // event
6157
resp.Request.Method, // method
6258
resp.Request.URL.String(), // url
6359
resp.StatusCode, // statusCode
6460
fmt.Errorf(apiError.Message), // err
65-
stackTrace, // stacktrace
61+
apiError.Raw, // raw resp
6662
)
6763
return apiError
6864
}
@@ -83,7 +79,7 @@ func handleAPIErrorResponse(resp *http.Response, log logger.Logger) *APIError {
8379
resp.Request.URL.String(), // url
8480
resp.StatusCode, // statusCode
8581
fmt.Errorf(apiError.Message), // err
86-
stackTrace, // stacktrace
82+
apiError.Raw, // raw resp
8783
)
8884
return apiError
8985
} else {
@@ -95,7 +91,7 @@ func handleAPIErrorResponse(resp *http.Response, log logger.Logger) *APIError {
9591
resp.Request.URL.String(), // url
9692
resp.StatusCode, // statusCode
9793
fmt.Errorf("Non-JSON error response received"), // err
98-
stackTrace, // stacktrace
94+
apiError.Raw, // raw resp
9995
)
10096
return apiError
10197
}

httpclient/httpclient_mocklogger.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ func (m *MockLogger) LogRequestEnd(event string, method string, url string, stat
7777
m.Called(event, method, url, statusCode, duration)
7878
}
7979

80-
func (m *MockLogger) LogError(event string, method string, url string, statusCode int, err error, stacktrace string) {
81-
m.Called(event, method, url, statusCode, err, stacktrace)
80+
func (m *MockLogger) LogError(event string, method string, url string, statusCode int, serverStatusMessage string, err error, stacktrace string) {
81+
m.Called(event, method, url, statusCode, serverStatusMessage, err, stacktrace)
8282
}
8383

8484
func (m *MockLogger) LogAuthTokenError(event string, method string, url string, statusCode int, err error) {

httpclient/httpclient_request.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,7 @@ func (c *Client) executeRequestWithRetries(method, endpoint string, body, out in
207207
if apiErr := handleAPIErrorResponse(resp, log); apiErr != nil {
208208
err = apiErr
209209
}
210-
log.LogError("request_error", method, endpoint, resp.StatusCode, err, status.TranslateStatusCode(resp))
211-
210+
log.LogError("request_error", method, endpoint, resp.StatusCode, resp.Status, err, status.TranslateStatusCode(resp))
212211
break
213212
}
214213
}

logger/zaplogger_logfields.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func (d *defaultLogger) LogRequestEnd(event string, method string, url string, s
3636
}
3737

3838
// LogError logs an error that occurs during the processing of an HTTP request or any other event, if the current log level permits.
39-
func (d *defaultLogger) LogError(event string, method, url string, statusCode int, err error, stacktrace string) {
39+
func (d *defaultLogger) LogError(event string, method, url string, statusCode int, serverStatusMessage string, err error, stacktrace string) {
4040
if d.logLevel <= LogLevelError {
4141
errorMessage := ""
4242
if err != nil {
@@ -48,6 +48,7 @@ func (d *defaultLogger) LogError(event string, method, url string, statusCode in
4848
zap.String("method", method),
4949
zap.String("url", url),
5050
zap.Int("status_code", statusCode),
51+
zap.String("status_message", serverStatusMessage),
5152
zap.String("error_message", errorMessage),
5253
zap.String("stacktrace", stacktrace),
5354
}

logger/zaplogger_logger.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ type Logger interface {
3434
// Updated method signatures to include the 'event' parameter
3535
LogRequestStart(event string, requestID string, userID string, method string, url string, headers map[string][]string)
3636
LogRequestEnd(event string, method string, url string, statusCode int, duration time.Duration)
37-
LogError(event string, method string, url string, statusCode int, err error, stacktrace string)
37+
LogError(event string, method string, url string, statusCode int, serverStatusMessage string, err error, stacktrace string)
3838
LogAuthTokenError(event string, method string, url string, statusCode int, err error)
3939
LogRetryAttempt(event string, method string, url string, attempt int, reason string, waitDuration time.Duration, err error)
4040
LogRateLimiting(event string, method string, url string, retryAfter string, waitDuration time.Duration)

0 commit comments

Comments
 (0)