在Java中禁用Log4J输出

如何使用log4j.properties文件快速closures所有Log4J输出?

将级别设置为OFF(而不是DEBUG,INFO,….)

如果要以编程方式closures日志logging,请使用

 List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers()); loggers.add(LogManager.getRootLogger()); for ( Logger logger : loggers ) { logger.setLevel(Level.OFF); } 
  log4j.rootLogger=OFF 

您可以将级别更改为OFF,这应该排除所有日志logging。 根据log4j网站,重要性的有效级别是TRACE,DEBUG,INFO,WARN,ERROR,FATAL。 有一个无证的等级叫OFF,它比FATAL的等级高,并closures所有的日志logging。

您还可以创build一个额外的根logging器来logging什么(closures级别),以便您可以轻松切换根logging器。 这里有一篇文章让你开始。

您可能也想阅读Log4J FAQ,因为我认为closures所有日志logging可能没有帮助。 这肯定不会加快你的应用程序,因为无论如何都要执行日志代码,直到log4j认为它不需要logging这个条目。

将级别更改为所需。 (我正在使用Log4j2,版本2.6.2)。 这是最简单的方法,改为<Root level="off">

例如:文件log4j2.xml
开发环境

 <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> <Console name="SimpleConsole" target="SYSTEM_OUT"> <PatternLayout pattern="%msg%n"/> </Console> </Appenders> <Loggers> <Root level="error"> <AppenderRef ref="Console"/> </Root> </Loggers> <Loggers> <Root level="info"> <AppenderRef ref="SimpleConsole"/> </Root> </Loggers> </Configuration> 

生产环境

 <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> <Console name="SimpleConsole" target="SYSTEM_OUT"> <PatternLayout pattern="%msg%n"/> </Console> </Appenders> <Loggers> <Root level="off"> <AppenderRef ref="Console"/> </Root> </Loggers> <Loggers> <Root level="off"> <AppenderRef ref="SimpleConsole"/> </Root> </Loggers> </Configuration> 

此外,还可以通过编程方式closures注销。

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

要么

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