SocketHandler
is a logging handler in the java.util.logging
package that sends log messages to a remote logging server using TCP sockets.
This is useful for:
- Distributed systems
- Centralized logging
- Real-time monitoring
It requires a logging server to receive and process logs (typically using SocketHandler
+ SocketHandlerServer
or a custom SocketHandlerListener
).
Commonly Used Methods

Simple Program
Logging Client: SocketLoggerClient.java
import java.io.IOException; import java.util.logging.*; public class SocketLoggerClient { public static void main(String[] args) { Logger logger = Logger.getLogger("network.logger"); try { SocketHandler handler = new SocketHandler("localhost", 5000); handler.setFormatter(new SimpleFormatter()); handler.setLevel(Level.ALL); logger.addHandler(handler); logger.setUseParentHandlers(false); logger.setLevel(Level.ALL); logger.info("This is an INFO log sent over the network."); logger.severe("This is a SEVERE log sent to the remote server."); } catch (IOException e) { e.printStackTrace(); } } }
Simple Logging Server: SocketLogServer.java
import java.io.*; import java.net.*; import java.util.logging.*; public class SocketLogServer { public static void main(String[] args) { try (ServerSocket serverSocket = new ServerSocket(5000)) { System.out.println("SocketLogServer is running..."); while (true) { Socket client = serverSocket.accept(); new Thread(() -> handleClient(client)).start(); } } catch (IOException e) { e.printStackTrace(); } } private static void handleClient(Socket socket) { try (ObjectInputStream ois = new ObjectInputStream(socket.getInputStream())) { LogRecord record; while ((record = (LogRecord) ois.readObject()) != null) { System.out.println("[" + record.getLevel() + "] " + record.getMessage()); } } catch (EOFException eof) { // Client closed } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } }
Server displays logs received from the client:
[INFO] This is an INFO log sent over the network.
[SEVERE] This is a SEVERE log sent to the remote server.
Code language: CSS (css)
Problem Statement
LotusJavaPrince and Mahesh are designing a fraud detection system for a multi-branch bank. Each branch logs activity locally, but for real-time monitoring, logs must also be sent to a central server using SocketHandler.
BranchTransactionLogger.java
import java.io.IOException; import java.util.logging.*; public class BranchTransactionLogger { public static void main(String[] args) { Logger logger = Logger.getLogger("com.bank.branch"); try { SocketHandler socketHandler = new SocketHandler("localhost", 6000); socketHandler.setFormatter(new SimpleFormatter()); socketHandler.setLevel(Level.ALL); logger.addHandler(socketHandler); logger.setUseParentHandlers(false); logger.setLevel(Level.ALL); logTransaction(logger, "LotusJavaPrince", 5000, true); logTransaction(logger, "Mahesh", 15000, false); logTransaction(logger, "UnknownUser", 99999, false); } catch (IOException e) { e.printStackTrace(); } } private static void logTransaction(Logger logger, String user, double amount, boolean success) { if (success) { logger.info(user + " successfully transacted $" + amount); } else { logger.severe("Transaction alert: " + user + " failed or suspicious transaction: $" + amount); } } }
Central Server: CentralLogMonitor.java
import java.io.*; import java.net.*; import java.util.logging.*; public class CentralLogMonitor { public static void main(String[] args) { try (ServerSocket serverSocket = new ServerSocket(6000)) { System.out.println("Central Fraud Monitor Running..."); while (true) { Socket client = serverSocket.accept(); new Thread(() -> listenToBranch(client)).start(); } } catch (IOException e) { e.printStackTrace(); } } private static void listenToBranch(Socket socket) { try (ObjectInputStream input = new ObjectInputStream(socket.getInputStream())) { LogRecord record; while ((record = (LogRecord) input.readObject()) != null) { System.out.println("[FraudLog][" + record.getLevel() + "]: " + record.getMessage()); } } catch (EOFException e) { // End of stream } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } }
SocketHandler
is powerful for enterprise-grade logging, where remote monitoring and analysis are required.With Java’s LogRecord
object, you can transmit structured logs and apply filters or alerting on the server.It’s commonly used in conjunction with custom servers or integrated into log aggregators (like Logstash or Splunk).