Hierarchical Logging in Java refers to the parent-child relationship among loggers based on their names. This structure allows you to configure logging behavior at higher levels (e.g., a package or module) and automatically apply or override it in child loggers.
Loggers in java.util.logging are organized in a tree hierarchy, with the dot (.) separator defining different levels of the hierarchya and similar to package names in Java.
Example Hierarchy:
Consider the following loggers:
Logger.getLogger("com");
Logger.getLogger("com.bank");
Logger.getLogger("com.bank.transaction");
Logger.getLogger("com.bank.transaction.credit");Code language: CSS (css)
This forms the following hierarchy:

Each child logger can:
- Inherit handlers from its parent unless explicitly disabled via
setUseParentHandlers(false) - Inherit logging level if not explicitly set
Practical Example
import java.util.logging.*;
public class HierarchicalLoggingExample {
public static void main(String[] args) {
Logger parentLogger = Logger.getLogger("com.bank");
Logger childLogger = Logger.getLogger("com.bank.transaction");
// Set parent logger
parentLogger.setLevel(Level.WARNING);
ConsoleHandler handler = new ConsoleHandler();
handler.setLevel(Level.ALL);
handler.setFormatter(new SimpleFormatter());
parentLogger.addHandler(handler);
// By default, childLogger inherits parent's level and handler
childLogger.info("This is an INFO message"); // Not shown (Level < WARNING)
childLogger.warning("This is a WARNING message"); // Shown
}
}Hierarchical logging is a powerful design in Java’s logging framework that:
- Mirrors Java’s package structure
- Allows modular, scalable logging configurations
- Enables parent-child inheritance of logging behavior
It’s a best practice in large applications to use hierarchical logger names for clarity, control, and consistency.
