log4j中isDebugEnabled()

最近在项目中,常有意无意的看到这样的代码

	if(log.isDebugEnabled()){
			log.debug("msg");
		}

 虽然从方法的命名规则大概知道是什么意思,但不知为什么要这样写?

通过百度搜索,大概理解这样写为提高代码的效率,这样写为什么能提高效率呢?

原因在于log日志具有以下5种正常级别

org.apache.log4j.Level类提供以下级别,但也可以通过Level类的子类自定义级别。
Level	 描述
ALL	 各级包括自定义级别
DEBUG	 指定细粒度信息事件是最有用的应用程序调试
ERROR	 错误事件可能仍然允许应用程序继续运行
FATAL	 指定非常严重的错误事件,这可能导致应用程序中止
INFO	 指定能够突出在粗粒度级别的应用程序运行情况的信息的消息
OFF	 这是最高等级,为了关闭日志记录
TRACE	 指定细粒度比DEBUG更低的信息事件
WARN	 指定具有潜在危害的情况

 优先级关系:
分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL或者您定义的级别。 

Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG

当在log4j.properties种设置:log4j.rootLogger=info,stdout

if(log.isDebugEnabled()){//此条件为假,if的语句体不执行,可以有选择的执行打印日志,从而提高了代码执行效率
			log.debug("msg");
		}

示例:

public class TestLog {
	
	public static final Logger log = LoggerFactory.getLogger(TestLog.class);
	
	public static void main(String[] args) {
		//int count = 0;
		log.info("-------begin----");
		if(log.isDebugEnabled()){
			log.debug("debug");
		}
		log.info("-------end------");
		
	}
}

 当设置:log4j.rootLogger=debug,stdout时输出结果:

2017-07-31 22:12:49,856-5p TestLog  - -------begin----
2017-07-31 22:12:49,871-5p TestLog  - debug
2017-07-31 22:12:49,871-5p TestLog  - -------end------

 当设置:log4j.rootLogger= info,stdout时输出结果:

2017-07-31 22:28:08,555-5p TestLog  - -------begin----
2017-07-31 22:28:08,558-5p TestLog  - -------end------

 使用{}写法也可以到达效果:

public static void main(String[] args) {
		//int count = 0;
		log.info("-------begin----");
		//if(log.isDebugEnabled()){
		//	log.debug("debug");
		//}
		log.debug("debug{}");
		log.info("-------end------");
		
	}

 

输出结果一样,大家可以动手尝试下,书写代码百遍,其义自现。

猜你喜欢

转载自lintaozhou.iteye.com/blog/2387827