Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Java代码中禁用log4j日志记录_Java_Log4j - Fatal编程技术网

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

如何从Java代码中禁用log4j日志记录,java,log4j,Java,Log4j,我使用一个使用log4j编写日志的遗留库。我的默认log4j.properties文件将日志定向到控制台,但在我的主程序的某些特定功能中,我希望完全禁用日志记录(从所有类) 我试过这个: Logger.getLogger(BasicImplementation.class.getName()).setLevel(Level.OFF); 其中“BasicImplementation”是进行日志记录的主要类之一,但它不起作用——日志仍然被写入控制台 这是我的log4j.properties: lo

我使用一个使用log4j编写日志的遗留库。我的默认log4j.properties文件将日志定向到控制台,但在我的主程序的某些特定功能中,我希望完全禁用日志记录(从所有类)

我试过这个:

Logger.getLogger(BasicImplementation.class.getName()).setLevel(Level.OFF);
其中“BasicImplementation”是进行日志记录的主要类之一,但它不起作用——日志仍然被写入控制台

这是我的log4j.properties:

log4j.rootLogger=off, stdout
#log4j.logger.ac.biu.nlp.nlp.engineml=info, logfile
#log4j.logger.org.BIU.utils.logging.ExperimentLogger=warn

...
log4j.rootLogger=warn,stdout
log4j.logger.ac.biu.nlp.nlp.engineml=info,日志文件
log4j.logger.org.BIU.utils.logging.ExperimentLogger=warn
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.patternalyout
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.patternalyout
log4j.appender.logfile.layout.ConversionPattern=%-5p%d{HH:mm:ss}[%t]:%m%n
log4j.appender.logfile.File=logfile.log

您可以尝试通过更改log4j属性来禁用它:

log4j.rootLogger=off, stdout
#log4j.logger.ac.biu.nlp.nlp.engineml=info, logfile
#log4j.logger.org.BIU.utils.logging.ExperimentLogger=warn

...
参考:
将以下内容添加到日志文件中

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.patternalyout
log4j.appender.logfiledata.layout.ConversionPattern=%-5p%d{HH:mm:ss}[%t]:%m%n
log4j.appender.logfiledata.File=logfiledata.log

如果上述操作不会停止,则至少会将BasicImplementation类中的所有数据记录到一个单独的文件中。

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

log4j.rootLogger=warn,stdout
log4j.logger.ac.biu.nlp.nlp.engineml=info,日志文件
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);
如何将其重置回配置文件中设置的值。

您可以使用

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

要禁用java代码中的任何日志记录,如果您想要实现完美的静默(如静默命令行工具),可以始终使用

也许是这样的:


Logger.getRootLogger().shutdown()

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


Logger.getLogger(“”).setLevel(Level.OFF) 

对于较新的Log4J版本,您可以考虑调用:

LogManager.shutdown()

而不是:

Logger.shutdown()

这是不赞成的。但它仍然是一样的:

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


您可能必须禁用根记录器,但请先发布您的
log4j.properties
/
log4j.xml