Log4j Concepts

From NovaOrdis Knowledge Base
Revision as of 00:23, 8 August 2016 by Ovidiu (talk | contribs)
Jump to navigation Jump to search

Relevance

Applies to log4j 2.

Internal

Overview

The main advantage of log4j over System.out.println() is the ability to disable certain log statements while allowing others, via configuration.

Logger

Logger is the central class in the log4j package. Most logging operations, except configuration, are done through this class. The Logger has a name and it is associated with a LoggerConfig. As the configuration is modified, Loggers may become associated with a different LoggerConfig, this causing this behavior to be modified.

Log4j makes it easy to name Loggers by software component. This can be accomplished by instantiating a Logger in each class, with the logger name equal to the fully qualified name of the class. Since naming Loggers after their owning class is such a common idiom, the convenience method LogManager.getLogger() is provided to automatically use the calling class's fully qualified class name as the Logger name.

Category deprecation note: Logger is a subclass of Category and extends it. Category has been deprecated. Internally, whenever log4j is asked to produce a Category object, it will instead produce a Logger object. In order to preserve backward compatibility, methods that previously accepted category objects still continue to accept category objects.

Creating a Logger Instance

The recommended way to create Logger instance is to request them by name from the LogManager:

Logger log = LogManager.getLogger("some-name");

LoggerConfig

The logging hierarchy is maintained as a relationship between LoggerConfig instances. LoggerConfig objects are created when Loggers are declared in the logging configuration. The LoggerConfig contains a set of Filters that must allow the LogEvent to pass before it will be passed to any Appenders. It contains references to the set of Appenders that should be used to process the event.

LoggerConfig Named Hierarchy

A LoggerConfig is said to be an ancestor of another LoggerConfig if its name followed by a dot is a prefix of the descendant name.

A LoggerConfig is said to be a parent of a child LoggerConfig is there are no ancestors between itself and the descendant LoggerConfig.

Root LoggerConfig

The root LoggerConfig resides at the top of the LoggerConfig hierarchy. It always exists and it is part of every hierarchy. The Logger that is directly linked to the root LoggerConfig can be obtained as follows:

Logger root = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);

which is equivalent with:

Logger root = LogManager.getRootLogger();

Log Levels

Category

This class has been deprecated and replaced with the Logger subclass. There is no need for new client code to use or refer to the Category class.

Filter

Appender

Configuration

The configuration of the log4j environment is typically performed on application initialization. The preferred way is by reading a configuration file. More details: http://logging.apache.org/log4j/2.x/manual/configuration.html