From 2be19017358686027e4bfae7e51d8766b3102f13 Mon Sep 17 00:00:00 2001 From: Nikolay Borisenko <22616990+nvborisenko@users.noreply.github.com> Date: Tue, 10 Feb 2026 22:55:55 +0300 Subject: [PATCH 1/3] [dotnet] Correlate low level http requests/responses and log failures --- .../webdriver/Remote/HttpCommandExecutor.cs | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/dotnet/src/webdriver/Remote/HttpCommandExecutor.cs b/dotnet/src/webdriver/Remote/HttpCommandExecutor.cs index fbac777a70659..7749ccd2de33b 100644 --- a/dotnet/src/webdriver/Remote/HttpCommandExecutor.cs +++ b/dotnet/src/webdriver/Remote/HttpCommandExecutor.cs @@ -435,10 +435,13 @@ public DiagnosticsHttpHandler(HttpMessageHandler messageHandler, ILogger logger) /// The http response message content. protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { + string requestId = request.GetHashCode().ToString("x8"); + if (_logger.IsEnabled(LogEventLevel.Trace)) { StringBuilder requestLogMessageBuilder = new(); - requestLogMessageBuilder.AppendFormat(">> {0} {1}", + requestLogMessageBuilder.AppendFormat(">> [{0}] {1} {2}", + requestId, request.Method, request.RequestUri?.ToString() ?? "null"); @@ -455,13 +458,29 @@ protected override async Task SendAsync(HttpRequestMessage _logger.Trace(requestLogMessageBuilder.ToString()); } - var response = await base.SendAsync(request, cancellationToken).ConfigureAwait(false); + HttpResponseMessage response; + + try + { + response = await base.SendAsync(request, cancellationToken).ConfigureAwait(false); + } + catch (Exception ex) + { + if (_logger.IsEnabled(LogEventLevel.Trace)) + { + _logger.Trace($"<< [{requestId}] {ex}"); + } + + throw; + } if (_logger.IsEnabled(LogEventLevel.Trace)) { StringBuilder responseLogMessageBuilder = new(); - - responseLogMessageBuilder.AppendFormat("<< {0} {1}", (int)response.StatusCode, response.ReasonPhrase); + responseLogMessageBuilder.AppendFormat("<< [{0}] {1} {2}", + requestId, + (int)response.StatusCode, + response.ReasonPhrase); if (!response.IsSuccessStatusCode && response.Content != null) { From a1d478d7fe02aaa6c27bcfd28a0edafbd46aa16a Mon Sep 17 00:00:00 2001 From: Nikolay Borisenko <22616990+nvborisenko@users.noreply.github.com> Date: Tue, 10 Feb 2026 23:09:40 +0300 Subject: [PATCH 2/3] Generate correlation only if tracing enabled --- .../src/webdriver/Remote/HttpCommandExecutor.cs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/dotnet/src/webdriver/Remote/HttpCommandExecutor.cs b/dotnet/src/webdriver/Remote/HttpCommandExecutor.cs index 7749ccd2de33b..ae41a156a3391 100644 --- a/dotnet/src/webdriver/Remote/HttpCommandExecutor.cs +++ b/dotnet/src/webdriver/Remote/HttpCommandExecutor.cs @@ -435,13 +435,14 @@ public DiagnosticsHttpHandler(HttpMessageHandler messageHandler, ILogger logger) /// The http response message content. protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { - string requestId = request.GetHashCode().ToString("x8"); + bool isTracingEnabled = _logger.IsEnabled(LogEventLevel.Trace); + string? correlationId = isTracingEnabled ? request.GetHashCode().ToString("x8") : null; - if (_logger.IsEnabled(LogEventLevel.Trace)) + if (isTracingEnabled) { StringBuilder requestLogMessageBuilder = new(); requestLogMessageBuilder.AppendFormat(">> [{0}] {1} {2}", - requestId, + correlationId, request.Method, request.RequestUri?.ToString() ?? "null"); @@ -466,19 +467,19 @@ protected override async Task SendAsync(HttpRequestMessage } catch (Exception ex) { - if (_logger.IsEnabled(LogEventLevel.Trace)) + if (isTracingEnabled) { - _logger.Trace($"<< [{requestId}] {ex}"); + _logger.Trace($"<< [{correlationId}] {ex}"); } throw; } - if (_logger.IsEnabled(LogEventLevel.Trace)) + if (isTracingEnabled) { StringBuilder responseLogMessageBuilder = new(); responseLogMessageBuilder.AppendFormat("<< [{0}] {1} {2}", - requestId, + correlationId, (int)response.StatusCode, response.ReasonPhrase); From 7071b836d1cb11ff3b68b312c33f91c84d98efc4 Mon Sep 17 00:00:00 2001 From: Nikolay Borisenko <22616990+nvborisenko@users.noreply.github.com> Date: Tue, 10 Feb 2026 23:14:46 +0300 Subject: [PATCH 3/3] Use marker in exception trace log --- dotnet/src/webdriver/Remote/HttpCommandExecutor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotnet/src/webdriver/Remote/HttpCommandExecutor.cs b/dotnet/src/webdriver/Remote/HttpCommandExecutor.cs index ae41a156a3391..6db5253ce5b67 100644 --- a/dotnet/src/webdriver/Remote/HttpCommandExecutor.cs +++ b/dotnet/src/webdriver/Remote/HttpCommandExecutor.cs @@ -469,7 +469,7 @@ protected override async Task SendAsync(HttpRequestMessage { if (isTracingEnabled) { - _logger.Trace($"<< [{correlationId}] {ex}"); + _logger.Trace($"!! [{correlationId}] {ex}"); } throw;