From 3d6267da93fcb3c64c232dfddd53f9e16df8528c Mon Sep 17 00:00:00 2001 From: Jkorf Date: Wed, 5 Mar 2025 09:02:25 +0100 Subject: [PATCH] Added specific logging for user cancellation on rest requests instead of generic warning log --- CryptoExchange.Net/Clients/RestApiClient.cs | 13 ++++++++++--- .../Extensions/RestApiClientLoggingExtensions.cs | 11 +++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/CryptoExchange.Net/Clients/RestApiClient.cs b/CryptoExchange.Net/Clients/RestApiClient.cs index cdc4f56..0ee0af1 100644 --- a/CryptoExchange.Net/Clients/RestApiClient.cs +++ b/CryptoExchange.Net/Clients/RestApiClient.cs @@ -241,10 +241,17 @@ namespace CryptoExchange.Net.Clients _logger.RestApiSendRequest(request.RequestId, definition, request.Content, string.IsNullOrEmpty(request.Uri.Query) ? "-" : request.Uri.Query, string.Join(", ", request.GetHeaders().Select(h => h.Key + $"=[{string.Join(",", h.Value)}]"))); TotalRequestsMade++; var result = await GetResponseAsync(request, definition.RateLimitGate, cancellationToken).ConfigureAwait(false); - if (!result) - _logger.RestApiErrorReceived(result.RequestId, result.ResponseStatusCode, (long)Math.Floor(result.ResponseTime!.Value.TotalMilliseconds), result.Error?.ToString()); + if (result.Error is not CancellationRequestedError) + { + if (!result) + _logger.RestApiErrorReceived(result.RequestId, result.ResponseStatusCode, (long)Math.Floor(result.ResponseTime!.Value.TotalMilliseconds), result.Error?.ToString()); + else + _logger.RestApiResponseReceived(result.RequestId, result.ResponseStatusCode, (long)Math.Floor(result.ResponseTime!.Value.TotalMilliseconds), OutputOriginalData ? result.OriginalData : "[Data only available when OutputOriginal = true]"); + } else - _logger.RestApiResponseReceived(result.RequestId, result.ResponseStatusCode, (long)Math.Floor(result.ResponseTime!.Value.TotalMilliseconds), OutputOriginalData ? result.OriginalData : "[Data only available when OutputOriginal = true]"); + { + _logger.RestApiCancellationRequested(result.RequestId); + } if (await ShouldRetryRequestAsync(definition.RateLimitGate, result, currentTry).ConfigureAwait(false)) continue; diff --git a/CryptoExchange.Net/Logging/Extensions/RestApiClientLoggingExtensions.cs b/CryptoExchange.Net/Logging/Extensions/RestApiClientLoggingExtensions.cs index a71285b..a8c5b50 100644 --- a/CryptoExchange.Net/Logging/Extensions/RestApiClientLoggingExtensions.cs +++ b/CryptoExchange.Net/Logging/Extensions/RestApiClientLoggingExtensions.cs @@ -21,6 +21,7 @@ namespace CryptoExchange.Net.Logging.Extensions private static readonly Action _restApiCheckingCache; private static readonly Action _restApiCacheHit; private static readonly Action _restApiCacheNotHit; + private static readonly Action _restApiCancellationRequested; static RestApiClientLoggingExtensions() { @@ -83,6 +84,12 @@ namespace CryptoExchange.Net.Logging.Extensions LogLevel.Trace, new EventId(4011, "RestApiCacheNotHit"), "Cache not hit for key {Key}"); + + _restApiCancellationRequested = LoggerMessage.Define( + LogLevel.Debug, + new EventId(4012, "RestApiCancellationRequested"), + "[Req {RequestId}] Request cancelled by user"); + } public static void RestApiErrorReceived(this ILogger logger, int? requestId, HttpStatusCode? responseStatusCode, long responseTime, string? error) @@ -144,5 +151,9 @@ namespace CryptoExchange.Net.Logging.Extensions { _restApiCacheNotHit(logger, key, null); } + public static void RestApiCancellationRequested(this ILogger logger, int? requestId) + { + _restApiCancellationRequested(logger, requestId, null); + } } }