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;