Logger

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.
Scroll to Top