fix(rustproxy-http): improve HTTP/2 proxy error logging with warning-level connection failures and debug error details

This commit is contained in:
2026-03-16 13:01:32 +00:00
parent 4c76a9f9f3
commit 1e2ca68fc7
3 changed files with 15 additions and 8 deletions

View File

@@ -990,7 +990,7 @@ impl HttpProxyService {
) = match tokio::time::timeout(self.connect_timeout, h2_builder.handshake(io)).await {
Ok(Ok(h)) => h,
Ok(Err(e)) => {
error!(backend = %backend_key, domain = %domain, error = %e, "Backend H2 handshake failed");
error!(backend = %backend_key, domain = %domain, error = %e, error_debug = ?e, "Backend H2 handshake failed");
self.metrics.backend_handshake_error(&backend_key);
return Ok(error_response(StatusCode::BAD_GATEWAY, "Backend H2 handshake failed"));
}
@@ -1008,7 +1008,7 @@ impl HttpProxyService {
let key = pool_key.clone();
tokio::spawn(async move {
if let Err(e) = conn.await {
debug!("HTTP/2 upstream connection error: {}", e);
warn!("HTTP/2 upstream connection error: {} ({:?})", e, e);
}
pool.remove_h2(&key);
});
@@ -1140,7 +1140,7 @@ impl HttpProxyService {
) = match tokio::time::timeout(self.connect_timeout, h2_builder.handshake(io)).await {
Ok(Ok(h)) => h,
Ok(Err(e)) => {
error!(backend = %backend_key, domain = %domain, error = %e, "H2 retry: handshake failed");
error!(backend = %backend_key, domain = %domain, error = %e, error_debug = ?e, "H2 retry: handshake failed");
self.metrics.backend_handshake_error(&backend_key);
self.metrics.backend_connection_closed(&backend_key);
return Ok(error_response(StatusCode::BAD_GATEWAY, "Backend H2 retry handshake failed"));
@@ -1159,7 +1159,7 @@ impl HttpProxyService {
let key = pool_key.clone();
tokio::spawn(async move {
if let Err(e) = conn.await {
debug!("H2 retry: upstream connection error: {}", e);
warn!("H2 retry: upstream connection error: {} ({:?})", e, e);
}
pool.remove_h2(&key);
});
@@ -1288,7 +1288,7 @@ impl HttpProxyService {
let key = pool_key.clone();
tokio::spawn(async move {
if let Err(e) = conn.await {
debug!("HTTP/2 upstream connection error: {}", e);
warn!("HTTP/2 upstream connection error: {} ({:?})", e, e);
}
pool.remove_h2(&key);
});
@@ -1343,6 +1343,7 @@ impl HttpProxyService {
backend = %bk,
domain = %domain,
error = %e,
error_debug = ?e,
"Auto-detect: H2 request failed, falling back to H1"
);
self.metrics.backend_h2_failure(&bk);
@@ -1600,11 +1601,11 @@ impl HttpProxyService {
// Evict the dead sender so subsequent requests get fresh connections
if let Some(key) = pool_key {
let bk = format!("{}:{}", key.host, key.port);
error!(backend = %bk, domain = %domain, error = %e, "Backend H2 request failed");
error!(backend = %bk, domain = %domain, error = %e, error_debug = ?e, "Backend H2 request failed");
self.metrics.backend_request_error(&bk);
self.connection_pool.remove_h2(key);
} else {
error!(domain = %domain, error = %e, "Backend H2 request failed");
error!(domain = %domain, error = %e, error_debug = ?e, "Backend H2 request failed");
}
return Ok(error_response(StatusCode::BAD_GATEWAY, "Backend H2 request failed"));
}