Project Alternative log4j Configuration

From NovaOrdis Knowledge Base
Jump to navigation Jump to search

Internal

Overview

A pattern that consists in applying alternative log4j configuration for applications that run in background. The application rely on a base log4j configuration file, usually shipped as part of the application's installation bundle, but it can change its logging behavior based on logging configuration present in the application's configuration file. Configuration that comes from the application's configuration file takes priority over configuration stored in log4j.xml, and the application usually ends up with a combination of those two, which is the effective logging configuration.


Important! The effective logging configuration becomes active only after AlternativeLoggingConfiguration.apply(...) is invoked. Before this call, the basis log4j.xml configuration applies. For the same reason, caching log.isTraceEnabled() into a static variable may become stale after applying the configuration change, so it is not recommended.

For command-line utilities that run in foreground and want to route their all log4j logging information to stderr if -v or --verbose command line options are used, see:

Project log4j Debugging on --verbose

log4j Debugging on --verbose and alternative log4j configuration can be combined, where --verbose flag applies until the configuration file is parsed and the new logging configuration is installed.

API

The API to support alternative logging configuration is available in novaordis-utilities 4.7.8 or newer, and consists in a collection of static utilities AlternativeLoggingConfiguration, the LoggingConfiguration interface and other support classes.

Yaml yaml = new Yaml();
Map m = (Map)yaml.load(...);

Map alternativeLoggingConfigurationMap = m.get(...);

LoggingConfiguration c = new YamlLoggingConfiguration(alternativeLoggingConfigurationMap);

AlternativeLoggingConfiguration.apply(c);

YAML Configuration

logging:
  file: /some/file.log
  loggers:
    - org.something: INFO
    - com.something.else: TRACE

Successful Implementations