为什么要使用isDebugEnabled()
之前在系统的代码中发现有时候会在打印日志的时候先进行一次判断,如下:
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Search parameters: " + searchParams);
}
我们使用的是Log4j2框架,框架自身提供了类似的许多api,比如isErrorEnabled()
,isInfoEnabled()
等,每个Level对有对应的一个判断Level是否启用的api,实际上这些api都是调用的另一个api:isEnabled
。
在打印日志之前先进行Level的判断,是因为在执行打印语句时,首先会先将要打印的字符串信息作为参数传递给被调用的方法。如下代码:
LOGGER.debug("Search parameters: " + searchParams);
首先会执行字符串拼接的操作,会涉及到对象的toString()方法以及StringBuilder的创建,接着把拼接后的字符串传递给debug语句,这时候才会去判断打印日志的级别,来决定是否将这个字符串输入到对应的日志文件里。假如最终该语句并不会把字符串打印出来,那么这个拼接字符串的过程就属于毫无意义的操作,会增加系统性能的损耗。</