如何从Java代码中禁用log4j日志记录

时间:2012-01-03 07:56:39

标签: java log4j

我使用使用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

8 个答案:

答案 0 :(得分:19)

因此,您定义了3个记录器,包括root:

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

Here's如何将其重置回配置文件中设置的内容。

答案 1 :(得分:9)

如果你想达到完美的沉默(比如一个安静的命令行工具),你可以随时使用NullAppender

Logger.getRootLogger().removeAllAppenders();
Logger.getRootLogger().addAppender(new NullAppender());

答案 2 :(得分:6)

您可以使用

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

禁用java代码中的任何日志记录

答案 3 :(得分:0)

也许是这样:

Logger.getRootLogger().shutdown();

答案 4 :(得分:0)

在java.util.logging.Logger的1.8版中,正确的格式为:

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

答案 5 :(得分:0)

对于较新的log4j版本,您可以考虑致电:

LogManager.shutdown();

代替:

Logger.shutdown();

已弃用。但这仍然是一回事:

调用此方法将安全地关闭并删除所有类别中的所有附加程序,包括默认层次结构中包含的root。

答案 6 :(得分:-2)

您可以尝试禁用它来更改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

答案 7 :(得分:-2)

以下添加到您的日志文件

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类中的所有数据记录到一个单独的文件中。

相关问题