Как отключить ведение журнала log4j из кода Java - PullRequest
11 голосов
/ 03 января 2012

Я использую устаревшую библиотеку, которая записывает журналы, используя log4j. Мой файл log4j.properties по умолчанию направляет журнал на консоль, но в некоторых специфических функциях моей основной программы я хотел бы полностью отключить ведение журнала (из всех классов).

Я пробовал это:

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

где "BasicImplementation" является одним из основных классов, который ведет журналирование, но он не работал - журналы все еще записываются на консоль.

Вот мой 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

Ответы [ 7 ]

19 голосов
/ 03 января 2012

Итак, у вас есть 3 определенных регистратора, включая root:

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

К сожалению, чтобы отключить их программно, вам необходимо указать ВСЕ ИХ в коде:

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);

Вот , как сбросить его обратно на то, что установлено в файле конфигурации.

9 голосов
/ 27 июня 2013

Если вы хотите добиться идеального молчания (как для тихого инструмента командной строки), вы всегда можете использовать NullAppender .

Logger.getRootLogger().removeAllAppenders();
Logger.getRootLogger().addAppender(new NullAppender());
6 голосов
/ 19 декабря 2012

Вы можете использовать

Logger.getRootLogger().setLevel(Level.OFF); 

чтобы отключить любую запись в коде Java

0 голосов
/ 27 июля 2018

В версии 1.8 java.util.logging.Logger правильная форма:

Logger.getLogger("").setLevel(Level.OFF);

0 голосов
/ 07 августа 2015

Возможно, вот так:

Logger.getRootLogger().shutdown();

0 голосов
/ 03 января 2012

Добавьте следующее в ваш файл журнала

log4j.logger.com.class.with.package.BasicImplementation = off, logfiledata

log4j.appender.logfiledata = ac.biu.nlp.nlp.log.BackupOlderFileAppender
log4j.appender.logfiledata.append=false
log4j.appender.logfiledata.layout = org.apache.log4j.PatternLayout
log4j.appender.logfiledata.layout.ConversionPattern = %-5p %d{HH:mm:ss} [%t]: %m%n
log4j.appender.logfiledata.File = logfiledata.log

Если вышеизложенное не остановит ведение журнала, оно по крайней мере запишет все данные из класса BasicImplementation в отдельный файл.

0 голосов
/ 03 января 2012

Вы можете попробовать отключить его, изменив log4j.properties:

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

...

Ссылка: http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Level.html#OFF

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...