Add debug logging for connection (re)use

This can help understand issues with reusing of stale connections.

Change-Id: I800afe3571dce1d877c117e646c7aa115ca23bea
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/HttpClientProvider.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/HttpClientProvider.java
index 93d324c..b24d700 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/HttpClientProvider.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/forwarder/rest/HttpClientProvider.java
@@ -27,12 +27,15 @@
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.X509TrustManager;
 import org.apache.http.ConnectionReuseStrategy;
+import org.apache.http.HttpHost;
+import org.apache.http.HttpRequest;
 import org.apache.http.auth.AuthScope;
 import org.apache.http.auth.UsernamePasswordCredentials;
 import org.apache.http.client.config.RequestConfig;
 import org.apache.http.config.Registry;
 import org.apache.http.config.RegistryBuilder;
 import org.apache.http.conn.HttpClientConnectionManager;
+import org.apache.http.conn.ManagedHttpClientConnection;
 import org.apache.http.conn.socket.ConnectionSocketFactory;
 import org.apache.http.conn.socket.PlainConnectionSocketFactory;
 import org.apache.http.conn.ssl.NoopHostnameVerifier;
@@ -42,6 +45,8 @@
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.protocol.HttpContext;
+import org.apache.http.protocol.HttpCoreContext;
 
 /** Provides an HTTP client with SSL capabilities. */
 class HttpClientProvider implements Provider<CloseableHttpClient> {
@@ -102,12 +107,28 @@
   private ConnectionReuseStrategy customConnectionReuseStrategy() {
     return (response, context) -> {
       if (response.getStatusLine().getStatusCode() == SC_SERVICE_UNAVAILABLE) {
+        log.atFine().log("Dropping pooled connection %s after 503 response", connInfo(context));
         return false;
       }
+      log.atFine().log("Sent request using pooled connection %s", connInfo(context));
       return DefaultConnectionReuseStrategy.INSTANCE.keepAlive(response, context);
     };
   }
 
+  private static String connInfo(HttpContext context) {
+    HttpCoreContext ctx = HttpCoreContext.adapt(context);
+    HttpHost target = ctx.getTargetHost();
+    ManagedHttpClientConnection conn =
+        (ManagedHttpClientConnection) context.getAttribute(HttpCoreContext.HTTP_CONNECTION);
+    String connId = conn != null ? conn.getId() : "unknown";
+    HttpRequest request = ctx.getRequest();
+    String requestLine =
+        request != null
+            ? request.getRequestLine().getMethod() + " " + request.getRequestLine().getUri()
+            : "unknown";
+    return connId + " to " + target + ": " + requestLine;
+  }
+
   private static SSLConnectionSocketFactory buildSslSocketFactory() {
     return new SSLConnectionSocketFactory(buildSslContext(), NoopHostnameVerifier.INSTANCE);
   }