2012-01-03 50 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();