The Logger
class is part of the java.util.logging
package in Java. It is used for logging messages for a specific system or application component. Loggers are typically named using hierarchical dot-separated names (e.g., com.bank.account
).
Commonly Used Methods

Simple Logger Program
import java.util.logging.Logger; import java.util.logging.Level; public class SimpleLoggerExample { private static final Logger logger = Logger.getLogger(SimpleLoggerExample.class.getName()); public static void main(String[] args) { logger.info("This is an INFO message."); logger.warning("This is a WARNING message."); logger.severe("This is a SEVERE message."); } } /* May 24, 2025 11:00:00 AM SimpleLoggerExample main INFO: This is an INFO message. May 24, 2025 11:00:00 AM SimpleLoggerExample main WARNING: This is a WARNING message. May 24, 2025 11:00:00 AM SimpleLoggerExample main SEVERE: This is a SEVERE message. */
Problem Statement:
LotusJavaPrince has designed a banking system that performs fund transfers. If something goes wrong during the transfer (like insufficient funds or a technical error), it should log the problem using Java’s built-in logging framework. Mahesh needs to ensure that both successful transactions and errors are logged for auditing and debugging.
import java.util.logging.*; import java.io.IOException; class BankAccount { private static final Logger logger = Logger.getLogger(BankAccount.class.getName()); private String accountHolder; private double balance; public BankAccount(String accountHolder, double balance) { this.accountHolder = accountHolder; this.balance = balance; logger.info("Account created for " + accountHolder + " with balance: " + balance); } public void transfer(BankAccount toAccount, double amount) { logger.info("Initiating transfer of " + amount + " from " + accountHolder + " to " + toAccount.accountHolder); if (amount <= 0) { logger.warning("Transfer amount must be positive."); return; } if (balance < amount) { logger.severe("Transfer failed: Insufficient balance in " + accountHolder + "'s account."); return; } this.balance -= amount; toAccount.balance += amount; logger.info("Transfer successful! New balance of " + accountHolder + ": " + balance); } } public class BankingLoggerCaseStudy { private static final Logger logger = Logger.getLogger(BankingLoggerCaseStudy.class.getName()); public static void main(String[] args) throws IOException { configureLogger(); BankAccount lotusJavaPrince = new BankAccount("LotusJavaPrince", 5000); BankAccount mahesh = new BankAccount("Mahesh", 3000); lotusJavaPrince.transfer(mahesh, 2000); // Successful lotusJavaPrince.transfer(mahesh, 4000); // Fails due to insufficient funds } private static void configureLogger() throws IOException { Logger rootLogger = Logger.getLogger(""); FileHandler fileHandler = new FileHandler("banking_log.log", true); fileHandler.setFormatter(new SimpleFormatter()); rootLogger.addHandler(fileHandler); rootLogger.setLevel(Level.INFO); } }
Output in banking_log.log:
INFO: Account created for LotusJavaPrince with balance: 5000.0
INFO: Account created for Mahesh with balance: 3000.0
INFO: Initiating transfer of 2000.0 from LotusJavaPrince to Mahesh
INFO: Transfer successful! New balance of LotusJavaPrince: 3000.0
INFO: Initiating transfer of 4000.0 from LotusJavaPrince to Mahesh
SEVERE: Transfer failed: Insufficient balance in LotusJavaPrince's account.
Code language: HTTP (http)
The Logger
class is essential for monitoring application flow and errors.
- It supports various logging levels (INFO, WARNING, SEVERE, etc.).
- It can be configured to output to console, files, or custom handlers.
- Useful in both simple tasks and large systems like banking, inventory, etc.