Can't set programmatically logger level for root appender

Viewed 304

In my java project I use log4j. If I want programmatically set logger for root apender I use this:

import org.apache.log4j.Logger;
private static final Logger logger = Logger.getLogger(Main.class);

    AppenderSkeleton consoleAppender = (AppenderSkeleton) Logger.getRootLogger().getAppender("Console");
    AppenderSkeleton fileAppender = (AppenderSkeleton) Logger.getRootLogger().getAppender("File");

Nice. It's work fine.

But now I update to log4j2 (slf4j)

And now here my code:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private static final Logger logger = LoggerFactory.getLogger(App.class);

AppenderSkeleton consoleAppender = (AppenderSkeleton) Logger.getRootLogger().getAppender("Console");

AppenderSkeleton fileAppender = (AppenderSkeleton) Logger.getRootLogger().getAppender("File");

But now I get error:

error: cannot find symbol Logger.getRootLogger()

How I can set programmatically root level for slf4j ?

1 Answers

slf4j is just a unified interface to emit log messages. It is implemented by different logging backends such as log4j2 or logback. However, slf4j does not extend to the logging configuration, which is highly backend specific. Therefore, it does not provide methods to change the log system configuration. This still needs to be done using the backend specific classes. In your case of log4j, you also cannot cast the org.slf4j.Logger to a org.apache.logging.log4j.Logger, as the latter does not extend the org.slf4j.Logger. You have to keep your old code for that task and adjust it to the new log4j2 programmatic convention. See the log4j2 documentation for details.

Related