diff --git a/tephra-core/src/main/java/org/apache/tephra/distributed/AbstractClientProvider.java b/tephra-core/src/main/java/org/apache/tephra/distributed/AbstractClientProvider.java
index 3abdafa..44be459 100644
--- a/tephra-core/src/main/java/org/apache/tephra/distributed/AbstractClientProvider.java
+++ b/tephra-core/src/main/java/org/apache/tephra/distributed/AbstractClientProvider.java
@@ -24,7 +24,6 @@
 import org.apache.thrift.transport.TFramedTransport;
 import org.apache.thrift.transport.TSocket;
 import org.apache.thrift.transport.TTransport;
-import org.apache.thrift.transport.TTransportException;
 import org.apache.twill.discovery.Discoverable;
 import org.apache.twill.discovery.DiscoveryServiceClient;
 import org.slf4j.Logger;
@@ -93,21 +92,20 @@
     if (endpointStrategy == null) {
       // if there is no discovery service, try to read host and port directly
       // from the configuration
-      LOG.info("Reading address and port from configuration.");
+      LOG.debug("Reading transaction service address and port from configuration.");
       address = configuration.get(TxConstants.Service.CFG_DATA_TX_BIND_ADDRESS,
                                   TxConstants.Service.DEFAULT_DATA_TX_BIND_ADDRESS);
       port = configuration.getInt(TxConstants.Service.CFG_DATA_TX_BIND_PORT,
                                   TxConstants.Service.DEFAULT_DATA_TX_BIND_PORT);
-      LOG.info("Service assumed at " + address + ":" + port);
+      LOG.debug("Transaction service configured at {}:{}.", address, port);
     } else {
       Discoverable endpoint = endpointStrategy.pick();
       if (endpoint == null) {
-        LOG.error("Unable to discover tx service.");
-        throw new TException("Unable to discover tx service.");
+        throw new TException("Unable to discover transaction service.");
       }
       address = endpoint.getSocketAddress().getHostName();
       port = endpoint.getSocketAddress().getPort();
-      LOG.info("Service discovered at " + address + ":" + port);
+      LOG.debug("Transaction service discovered at {}:{}.", address, port);
     }
 
     // now we have an address and port, try to connect a client
@@ -115,22 +113,15 @@
       timeout = configuration.getInt(TxConstants.Service.CFG_DATA_TX_CLIENT_TIMEOUT,
           TxConstants.Service.DEFAULT_DATA_TX_CLIENT_TIMEOUT_MS);
     }
-    LOG.info("Attempting to connect to tx service at " +
-               address + ":" + port + " with timeout " + timeout + " ms.");
+    LOG.debug("Attempting to connect to transaction service at {}:{} with RPC timeout of {} ms." +
+               address, port, timeout);
     // thrift transport layer
-    TTransport transport =
-        new TFramedTransport(new TSocket(address, port, timeout));
-    try {
-      transport.open();
-    } catch (TTransportException e) {
-      LOG.error("Unable to connect to tx service: " + e.getMessage());
-      throw e;
-    }
+    TTransport transport = new TFramedTransport(new TSocket(address, port, timeout));
+    transport.open();
     // and create a thrift client
     TransactionServiceThriftClient newClient = new TransactionServiceThriftClient(transport);
 
-    LOG.info("Connected to tx service at " +
-               address + ":" + port);
+    LOG.debug("Connected to transaction service at {}:{}.", address, port);
     return newClient;
   }
 
diff --git a/tephra-core/src/main/java/org/apache/tephra/distributed/PooledClientProvider.java b/tephra-core/src/main/java/org/apache/tephra/distributed/PooledClientProvider.java
index 9df1441..95fc8ad 100644
--- a/tephra-core/src/main/java/org/apache/tephra/distributed/PooledClientProvider.java
+++ b/tephra-core/src/main/java/org/apache/tephra/distributed/PooledClientProvider.java
@@ -18,7 +18,6 @@
 
 package org.apache.tephra.distributed;
 
-import com.google.common.base.Throwables;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.tephra.TxConstants;
 import org.apache.thrift.TException;
@@ -78,9 +77,8 @@
     maxClients = configuration.getInt(TxConstants.Service.CFG_DATA_TX_CLIENT_COUNT,
                                       TxConstants.Service.DEFAULT_DATA_TX_CLIENT_COUNT);
     if (maxClients < 1) {
-      LOG.warn("Configuration of " + TxConstants.Service.CFG_DATA_TX_CLIENT_COUNT +
-                 " is invalid: value is " + maxClients + " but must be at least 1. " +
-                 "Using 1 as a fallback. ");
+      LOG.warn("Configuration of {} is invalid: Value is {} but must be at least 1. Using 1 as a fallback.",
+               TxConstants.Service.CFG_DATA_TX_CLIENT_COUNT, maxClients);
       maxClients = 1;
     }
 
@@ -88,9 +86,8 @@
       configuration.getLong(TxConstants.Service.CFG_DATA_TX_CLIENT_OBTAIN_TIMEOUT_MS,
                             TxConstants.Service.DEFAULT_DATA_TX_CLIENT_OBTAIN_TIMEOUT_MS);
     if (obtainClientTimeoutMs < 0) {
-      LOG.warn("Configuration of " + TxConstants.Service.CFG_DATA_TX_CLIENT_COUNT +
-                 " is invalid: value is " + obtainClientTimeoutMs + " but must be at least 0. " +
-                 "Using 0 as a fallback. ");
+      LOG.warn("Configuration of {} is invalid: Value is {} but must be at least 0. Using 0 as a fallback.",
+               TxConstants.Service.CFG_DATA_TX_CLIENT_COUNT, obtainClientTimeoutMs);
       obtainClientTimeoutMs = 0;
     }
     this.clients = new TxClientPool(maxClients);
@@ -109,8 +106,7 @@
 
   @Override
   public String toString() {
-    return "Elastic pool of size " + this.maxClients +
-      ", with timeout (in milliseconds): " + this.obtainClientTimeoutMs;
+    return String.format("Elastic pool of size %d with timeout %d ms", maxClients, obtainClientTimeoutMs);
   }
 
   private TxClientPool getClientPool() {
@@ -123,8 +119,7 @@
         try {
           initializePool();
         } catch (TException e) {
-          LOG.error("Failed to initialize Tx client provider", e);
-          throw Throwables.propagate(e);
+          throw new RuntimeException("Failed to initialize transaction client provider: " + this, e);
         }
       }
     }
diff --git a/tephra-core/src/main/java/org/apache/tephra/distributed/SingleUseClientProvider.java b/tephra-core/src/main/java/org/apache/tephra/distributed/SingleUseClientProvider.java
index d55da5e..0cee60c 100644
--- a/tephra-core/src/main/java/org/apache/tephra/distributed/SingleUseClientProvider.java
+++ b/tephra-core/src/main/java/org/apache/tephra/distributed/SingleUseClientProvider.java
@@ -43,12 +43,7 @@
 
   @Override
   public CloseableThriftClient getCloseableClient() throws TException, TimeoutException, InterruptedException {
-    try {
-      return new CloseableThriftClient(this, newClient(timeout));
-    } catch (TException e) {
-      LOG.error("Unable to create new tx client: " + e.getMessage());
-      throw e;
-    }
+    return new CloseableThriftClient(this, newClient(timeout));
   }
 
   @Override
diff --git a/tephra-core/src/main/java/org/apache/tephra/distributed/ThreadLocalClientProvider.java b/tephra-core/src/main/java/org/apache/tephra/distributed/ThreadLocalClientProvider.java
index dedaffe..a067c99 100644
--- a/tephra-core/src/main/java/org/apache/tephra/distributed/ThreadLocalClientProvider.java
+++ b/tephra-core/src/main/java/org/apache/tephra/distributed/ThreadLocalClientProvider.java
@@ -45,14 +45,8 @@
   public CloseableThriftClient getCloseableClient() throws TException, TimeoutException, InterruptedException {
     TransactionServiceThriftClient client = this.clients.get();
     if (client == null) {
-      try {
-        client = this.newClient();
-        clients.set(client);
-      } catch (TException e) {
-        LOG.error("Unable to create new tx client for thread: "
-                    + e.getMessage());
-        throw e;
-      }
+      client = this.newClient();
+      clients.set(client);
     }
     return new CloseableThriftClient(this, client);
   }
