Как отключить ведение журнала log4j из кода Java
Я использую устаревшую библиотеку, которая записывает журналы, используя 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
Ответы
Ответ 1
Итак, у вас определено 3 регистратора, включая корень:
log4j.rootLogger=warn, stdout
log4j.logger.ac.biu.nlp.nlp.engineml=info, logfile
log4j.logger.org.BIU.utils.logging.ExperimentLogger=warn
К сожалению, чтобы программно их отключить, вам необходимо указать ALL OF THEM в коде:
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);
Вот как вернуть его обратно к тому, что установлено в файле конфигурации.
Ответ 2
Если вы хотите достичь идеальной тишины (например, для тихого инструмента командной строки), вы всегда можете использовать NullAppender.
Logger.getRootLogger().removeAllAppenders();
Logger.getRootLogger().addAppender(new NullAppender());
Ответ 3
Вы можете использовать
Logger.getRootLogger().setLevel(Level.OFF);
для отключения любого входа в Java-код
Ответ 4
Возможно, так:
Logger.getRootLogger().shutdown();
Ответ 5
Вы можете попытаться отключить его, изменив 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
Ответ 6
Добавьте в свой файл журнала следующее:
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 в отдельный файл.