Programmatically change log level in Log4j2 Programmatically change log level in Log4j2 java java

Programmatically change log level in Log4j2


The Easy Way :

EDITED according to log4j2 version 2.4 FAQ

You can set a logger’s level with the class Configurator from Log4j Core. BUT be aware that the Configurator class is not part of the public API.

// org.apache.logging.log4j.core.config.Configurator;Configurator.setLevel("com.example.Foo", Level.DEBUG);// You can also set the root logger:Configurator.setRootLevel(Level.DEBUG);

Source

The Preferable Way :

EDITED to reflect changes in the API introduced in Log4j2 version 2.0.2

If you wish to change the root logger level, do something like this :

LoggerContext ctx = (LoggerContext) LogManager.getContext(false);Configuration config = ctx.getConfiguration();LoggerConfig loggerConfig = config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME); loggerConfig.setLevel(level);ctx.updateLoggers();  // This causes all Loggers to refetch information from their LoggerConfig.

Here is the javadoc for LoggerConfig.


The accepted answer by @slaadvak did not work for me for Log4j2 2.8.2. The following did.

To change the log Level universally use:

Configurator.setAllLevels(LogManager.getRootLogger().getName(), level);

To change the log Level for only the current class, use:

Configurator.setLevel(LogManager.getLogger(CallingClass.class).getName(), level);


If you want to change a single specific logger level (not the root logger or loggers configured in the configuration file) you can do this:

public static void setLevel(Logger logger, Level level) {    final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);    final Configuration config = ctx.getConfiguration();    LoggerConfig loggerConfig = config.getLoggerConfig(logger.getName());    LoggerConfig specificConfig = loggerConfig;    // We need a specific configuration for this logger,    // otherwise we would change the level of all other loggers    // having the original configuration as parent as well    if (!loggerConfig.getName().equals(logger.getName())) {        specificConfig = new LoggerConfig(logger.getName(), level, true);        specificConfig.setParent(loggerConfig);        config.addLogger(logger.getName(), specificConfig);    }    specificConfig.setLevel(level);    ctx.updateLoggers();}