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

14

我使用一个使用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
很可能你需要禁用根记录器,但请先发布你的 log4j.properties/log4j.xml 文件。 - MaDa
8个回答

21

所以,你定义了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);

这里是如何将其重置为配置文件中设置的内容。


9

如果您想要实现完美的静音(比如对于一个安静的命令行工具),您可以始终使用NullAppender

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

7
您可以使用

标签


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

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


2
在Java.util.logging.Logger 1.8版本中,正确的形式是: Logger.getLogger("").setLevel(Level.OFF); 该代码用于关闭日志记录器。

0

对于更新的log4j版本,您可以考虑调用:

LogManager.shutdown();

改为:

Logger.shutdown();

该方法已被弃用,但仍然具有相同的功能:

调用此方法将安全关闭并删除默认层次结构中包含的所有类别(包括根)中的所有附加器。


0

可能是这样的:

Logger.getRootLogger().shutdown();


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

-2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接