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.
