2012-01-03 57 views
10

我使用使用log4j写入日志的旧式库。我的默认log4j.properties文件将日志指向控制台,但是在我的主程序的某些特定功能中,我希望完全禁用所有类的日志记录。如何从Java代码中禁用log4j日志记录

我尝试这样做:

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

很可能,你必须禁用根记录器,但请首先发表您的'log4j.properties' /'log4j.xml'。 – MaDa 2012-01-03 09:22:37

+0

好的,我贴了 – 2012-01-03 10:27:26

回答

18

所以,你必须定义了3个记录器,包括根:

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

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

+0

太棒了,它的工作! – 2012-01-10 08:31:36

-1

以下内容添加到您的日志文件

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

-1。就像在瑞克的。 – MaDa 2012-01-03 11:15:19

6

您可以使用

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

在Java代码

+1

如果您有自定义记录器,这将不起作用。 – Amos 2015-11-07 07:28:24

9

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

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

谢谢,为我完美工作:) – Ashwin 2017-01-12 09:33:26

0

也许这样的:

Logger.getRootLogger().shutdown();