Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to disable log4j logging from Java code

Tags:

java

log4j

I use a legacy library that writes logs using log4j. My default log4j.properties file directs the log to the console, but in some specific functions of my main program, I would like to disable logging altogether (from all classes).

I tried this:

Logger.getLogger(BasicImplementation.class.getName()).setLevel(Level.OFF);

where "BasicImplementation" is one of the main classes that does logging, but it didn't work - the logs are still written to the console.

Here is my log4j.properties:

log4j.rootLogger=warn, stdout
log4j.logger.ac.biu.nlp.nlp.engineml=info, logfile
log4j.logger.org.BIU.utils.logging.ExperimentLogger=warn

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-5p %d{HH:mm:ss} [%t]: %m%n

log4j.appender.logfile = ac.biu.nlp.nlp.log.BackupOlderFileAppender
log4j.appender.logfile.append=false
log4j.appender.logfile.layout = org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern = %-5p %d{HH:mm:ss} [%t]: %m%n
log4j.appender.logfile.File = logfile.log
like image 492
Erel Segal-Halevi Avatar asked Jan 03 '12 07:01

Erel Segal-Halevi


2 Answers

So, you have 3 loggers defined, including the root:

log4j.rootLogger=warn, stdout
log4j.logger.ac.biu.nlp.nlp.engineml=info, logfile
log4j.logger.org.BIU.utils.logging.ExperimentLogger=warn

Unfortunately, to disable them programatically, you need to specify ALL OF THEM in the code:

Logger.getLogger("ac.biu.nlp.nlp.engineml").setLevel(Level.OFF);
Logger.getLogger("org.BIU.utils.logging.ExperimentLogger").setLevel(Level.OFF);
Logger.getRootLogger().setLevel(Level.OFF);

Here's how to reset it back to what's set in the config file.

like image 121
MaDa Avatar answered Oct 19 '22 08:10

MaDa


If you wanna achieve perfect silence (like for a quiet command line tool), you can always use the NullAppender.

Logger.getRootLogger().removeAllAppenders();
Logger.getRootLogger().addAppender(new NullAppender());
like image 9
schnatterer Avatar answered Oct 19 '22 10:10

schnatterer