![b102b457f120dbf143b62e0101519bff.png](https://i-blog.csdnimg.cn/blog_migrate/205cb5bbdaf698d44f5642ead09e094c.jpeg)
日志框架中为什么有isDebugEnabled方法?
今天坐高的时候突然想起好多年前的遇到的一个面试题,日志文件可以配置日志级别,为什么日志框架中还有isDebugEnabled方法?
如果我们在日志的配置文件配置日志级别是INFO,下面的日志代码是不会有任何输出的,
logger.debug("Processing trade with id: " + id + " symbol: " + symbol);
不执行日志输出,但是会拼接debug方法里面的字符串,为了提供性能,我们要加上isDebugEnabled方法,代码如下:
if (log.isDebugEnabled()) {
log.debug("The log id : " + id + " symbol: " + symbol);
}
今天又看了下阿里巴巴的开发手册,里面也有类似的强制要求,内容如下:
【强制】对trace/debug/info级别的日志输出,必须使用条件输出形式或者使用占位符的方式。 说明:logger.debug("Processing trade with id: " + id + " symbol: " + symbol); 如果日志级别是warn,上述日志不会打印,但是会执行字符串拼接操作,如果symbol是对象,会执行toString()方法,浪费了系统资源,执行了上述操作,最终日志却没有打印。
正例:(条件)
if (logger.isDebugEnabled()) {
logger.debug("Processing trade with id: " + id + " symbol: " + symbol);
}
正例:(占位符)
logger.debug("Processing trade with id: {} symbol : {} ", id, symbol);