diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/BasicHttpClientConnectionManager.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/BasicHttpClientConnectionManager.java
index e3ebefc..6af618f 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/BasicHttpClientConnectionManager.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/BasicHttpClientConnectionManager.java
@@ -93,8 +93,11 @@
 
     private static final Logger LOG = LoggerFactory.getLogger(BasicHttpClientConnectionManager.class);
 
+    private static final AtomicLong COUNT = new AtomicLong(0);
+
     private final HttpClientConnectionOperator connectionOperator;
     private final HttpConnectionFactory<ManagedHttpClientConnection> connFactory;
+    private final String id;
 
     private ManagedHttpClientConnection conn;
     private HttpRoute route;
@@ -131,6 +134,7 @@
         super();
         this.connectionOperator = Args.notNull(httpClientConnectionOperator, "Connection operator");
         this.connFactory = connFactory != null ? connFactory : ManagedHttpClientConnectionFactory.INSTANCE;
+        this.id = String.format("ep-%010d", COUNT.getAndIncrement());
         this.expiry = Long.MAX_VALUE;
         this.socketConfig = SocketConfig.DEFAULT;
         this.closed = new AtomicBoolean(false);
@@ -207,7 +211,9 @@
 
     private synchronized void closeConnection(final CloseMode closeMode) {
         if (this.conn != null) {
-            LOG.debug("Closing connection {}", closeMode);
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("{} Closing connection {}", id, closeMode);
+            }
             this.conn.close(closeMode);
             this.conn = null;
         }
@@ -216,7 +222,7 @@
     private void checkExpiry() {
         if (this.conn != null && System.currentTimeMillis() >= this.expiry) {
             if (LOG.isDebugEnabled()) {
-                LOG.debug("Connection expired @ {}", new Date(this.expiry));
+                LOG.debug("{} Connection expired @ {}", id, new Date(this.expiry));
             }
             closeConnection(CloseMode.GRACEFUL);
         }
@@ -225,7 +231,7 @@
     synchronized ManagedHttpClientConnection getConnection(final HttpRoute route, final Object state) throws IOException {
         Asserts.check(!this.closed.get(), "Connection manager has been shut down");
         if (LOG.isDebugEnabled()) {
-            LOG.debug("Get connection for route {}", route);
+            LOG.debug("{} Get connection for route {}", id, route);
         }
         Asserts.check(!this.leased, "Connection is still allocated");
         if (!LangUtils.equals(this.route, route) || !LangUtils.equals(this.state, state)) {
@@ -254,9 +260,8 @@
     public synchronized void release(final ConnectionEndpoint endpoint, final Object state, final TimeValue keepAlive) {
         Args.notNull(endpoint, "Managed endpoint");
         final InternalConnectionEndpoint internalEndpoint = cast(endpoint);
-        final String id = internalEndpoint.id;
         final ManagedHttpClientConnection conn = internalEndpoint.detach();
-        if (conn != null && LOG.isDebugEnabled()) {
+        if (LOG.isDebugEnabled()) {
             LOG.debug("{} Releasing connection {}", id, conn);
         }
         if (this.closed.get()) {
@@ -360,18 +365,14 @@
         }
     }
 
-    private static final AtomicLong COUNT = new AtomicLong(0);
-
     class InternalConnectionEndpoint extends ConnectionEndpoint {
 
         private final HttpRoute route;
         private final AtomicReference<ManagedHttpClientConnection> connRef;
-        private final String id;
 
         public InternalConnectionEndpoint(final HttpRoute route, final ManagedHttpClientConnection conn) {
             this.route = route;
             this.connRef = new AtomicReference<>(conn);
-            this.id = String.format("ep-%010d", COUNT.getAndIncrement());
         }
 
         HttpRoute getRoute() {
@@ -432,7 +433,7 @@
             Args.notNull(request, "HTTP request");
             Args.notNull(requestExecutor, "Request executor");
             if (LOG.isDebugEnabled()) {
-                LOG.debug("{} executing exchange {}", id, exchangeId);
+                LOG.debug("{} Executing exchange {}", id, exchangeId);
             }
             return requestExecutor.execute(request, getValidatedConnection(), context);
         }
