diff --git a/lib/java/src/com/facebook/thrift/server/TSimpleServer.java b/lib/java/src/com/facebook/thrift/server/TSimpleServer.java
index bf66843..1c25261 100644
--- a/lib/java/src/com/facebook/thrift/server/TSimpleServer.java
+++ b/lib/java/src/com/facebook/thrift/server/TSimpleServer.java
@@ -6,6 +6,9 @@
 
 package com.facebook.thrift.server;
 
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
 import com.facebook.thrift.TException;
 import com.facebook.thrift.TProcessor;
 import com.facebook.thrift.TProcessorFactory;
@@ -23,6 +26,8 @@
  */
 public class TSimpleServer extends TServer {
 
+  private static final Logger LOGGER = Logger.getLogger(TSimpleServer.class.getName());
+
   private boolean stopped_ = false;
 
   public TSimpleServer(TProcessor processor,
@@ -77,7 +82,7 @@
     try {
       serverTransport_.listen();
     } catch (TTransportException ttx) {
-      ttx.printStackTrace();
+      LOGGER.log(Level.SEVERE, "Error occurred during listening.", ttx);
       return;
     }
 
@@ -102,11 +107,11 @@
         // Client died, just move on
       } catch (TException tx) {
         if (!stopped_) {
-          tx.printStackTrace();
+          LOGGER.log(Level.SEVERE, "Thrift error occurred during processing of message.", tx);
         }
       } catch (Exception x) {
         if (!stopped_) {
-          x.printStackTrace();
+          LOGGER.log(Level.SEVERE, "Error occurred during processing of message.", x);
         }
       }
 
diff --git a/lib/java/src/com/facebook/thrift/server/TThreadPoolServer.java b/lib/java/src/com/facebook/thrift/server/TThreadPoolServer.java
index 7b97071..13f83a1 100644
--- a/lib/java/src/com/facebook/thrift/server/TThreadPoolServer.java
+++ b/lib/java/src/com/facebook/thrift/server/TThreadPoolServer.java
@@ -22,6 +22,8 @@
 import java.util.concurrent.SynchronousQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 
 /**
@@ -32,6 +34,8 @@
  */
 public class TThreadPoolServer extends TServer {
 
+  private static final Logger LOGGER = Logger.getLogger(TThreadPoolServer.class.getName());
+
   // Executor service for handling client connections
   private ExecutorService executorService_;
 
@@ -156,7 +160,7 @@
     try {
       serverTransport_.listen();
     } catch (TTransportException ttx) {
-      ttx.printStackTrace();
+      LOGGER.log(Level.SEVERE, "Error occurred during listening.", ttx);
       return;
     }
 
@@ -170,7 +174,7 @@
       } catch (TTransportException ttx) {
         if (!stopped_) {
           ++failureCount;
-          ttx.printStackTrace();
+          LOGGER.log(Level.WARNING, "Transport error occurred during acceptance of message.", ttx);
         }
       }
     }
@@ -237,9 +241,9 @@
       } catch (TTransportException ttx) {
         // Assume the client died and continue silently
       } catch (TException tx) {
-        tx.printStackTrace();
+        LOGGER.log(Level.SEVERE, "Thrift error occurred during processing of message.", tx);
       } catch (Exception x) {
-        x.printStackTrace();
+        LOGGER.log(Level.SEVERE, "Error occurred during processing of message.", x);
       }
 
       if (inputTransport != null) {
diff --git a/lib/java/src/com/facebook/thrift/transport/TIOStreamTransport.java b/lib/java/src/com/facebook/thrift/transport/TIOStreamTransport.java
index 5fef3b7..fd561ed 100644
--- a/lib/java/src/com/facebook/thrift/transport/TIOStreamTransport.java
+++ b/lib/java/src/com/facebook/thrift/transport/TIOStreamTransport.java
@@ -9,6 +9,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  * This is the most commonly used base transport. It takes an InputStream
@@ -20,6 +22,8 @@
  */
 public class TIOStreamTransport extends TTransport {
 
+  private static final Logger LOGGER = Logger.getLogger(TIOStreamTransport.class.getName());
+
   /** Underlying inputStream */
   protected InputStream inputStream_ = null;
 
@@ -84,8 +88,7 @@
       try {
         inputStream_.close();
       } catch (IOException iox) {
-        System.err.println("WARNING: Error closing input stream: " +
-                           iox.getMessage());
+        LOGGER.log(Level.WARNING, "Error closing input stream.", iox);
       }
       inputStream_ = null;
     }
@@ -93,8 +96,7 @@
       try {
         outputStream_.close();
       } catch (IOException iox) {
-        System.err.println("WARNING: Error closing output stream: " +
-                           iox.getMessage());
+        LOGGER.log(Level.WARNING, "Error closing output stream.", iox);
       }
       outputStream_ = null;
     }
diff --git a/lib/java/src/com/facebook/thrift/transport/TServerSocket.java b/lib/java/src/com/facebook/thrift/transport/TServerSocket.java
index 2692ac4..14a925b 100644
--- a/lib/java/src/com/facebook/thrift/transport/TServerSocket.java
+++ b/lib/java/src/com/facebook/thrift/transport/TServerSocket.java
@@ -11,6 +11,8 @@
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.SocketException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  * Wrapper around ServerSocket for Thrift.
@@ -19,6 +21,8 @@
  */
 public class TServerSocket extends TServerTransport {
 
+  private static final Logger LOGGER = Logger.getLogger(TServerSocket.class.getName());
+
   /**
    * Underlying serversocket object
    */
@@ -81,7 +85,7 @@
       try {
         serverSocket_.setSoTimeout(0);
       } catch (SocketException sx) {
-        sx.printStackTrace();
+        LOGGER.log(Level.WARNING, "Could not set socket timeout.", sx);
       }
     }
   }
@@ -105,8 +109,7 @@
       try {
         serverSocket_.close();
       } catch (IOException iox) {
-        System.err.println("WARNING: Could not close server socket: " +
-                           iox.getMessage());
+        LOGGER.log(Level.WARNING, "Could not close server socket.", iox);
       }
       serverSocket_ = null;
     }
diff --git a/lib/java/src/com/facebook/thrift/transport/TSocket.java b/lib/java/src/com/facebook/thrift/transport/TSocket.java
index 2053850..c30a478 100644
--- a/lib/java/src/com/facebook/thrift/transport/TSocket.java
+++ b/lib/java/src/com/facebook/thrift/transport/TSocket.java
@@ -12,6 +12,8 @@
 import java.net.InetSocketAddress;
 import java.net.Socket;
 import java.net.SocketException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  * Socket implementation of the TTransport interface. To be commented soon!
@@ -20,6 +22,8 @@
  */
 public class TSocket extends TIOStreamTransport {
 
+  private static final Logger LOGGER = Logger.getLogger(TSocket.class.getName());
+
   /**
    * Wrapped Socket object
    */
@@ -52,7 +56,7 @@
       socket_.setSoLinger(false, 0);
       socket_.setTcpNoDelay(true);
     } catch (SocketException sx) {
-      sx.printStackTrace();
+      LOGGER.log(Level.WARNING, "Could not configure socket.", sx);
     }
 
     if (isOpen()) {
@@ -102,7 +106,7 @@
       socket_.setTcpNoDelay(true);
       socket_.setSoTimeout(timeout_);
     } catch (SocketException sx) {
-      sx.printStackTrace();
+      LOGGER.log(Level.WARNING, "Could not configure socket.", sx);
     }
   }
 
@@ -116,7 +120,7 @@
     try {
       socket_.setSoTimeout(timeout);
     } catch (SocketException sx) {
-      sx.printStackTrace();
+      LOGGER.log(Level.WARNING, "Could not set socket timeout.", sx);
     }
   }
 
@@ -181,8 +185,7 @@
       try {
         socket_.close();
       } catch (IOException iox) {
-        System.err.println("WARNING: exception closing socket: " +
-                           iox.getMessage());
+        LOGGER.log(Level.WARNING, "Could not close socket.", iox);
       }
       socket_ = null;
     }
