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