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.