转自:https://www.jianshu.com/p/e1eb7ebfb21e
先看下面的代码,在真正执行logger.debug()
之前,进行了logger.isDebugEnabled()
的判断,既然log4j.properties已经配置了log level为debug, 为什么还需要这个判断?
if (logger.isDebugEnabled()) { logger.debug("Entry number: " + i + " is " + entry[i].toString());}
加上这个logger.isDebugEnabled()
后,如果值为false,if里面的代码就不会执行,就节省了字符串的拼接,少生成几个对象,如果不加,总会先拼接里面的字符串(连接字符串最好也不用+)
如果不用logger.isDebugEnabled()
, 请使用log4j的其他重载的方法, 比如下面的
ogger.debug("Entry number: {} is {}", i, entry[i]);
这个代码实际上会先判断debug是否是enabled, 只有enabled才会format里面的字符串,下面就是log4j的源码:
@Override public void debug(final String message, final Supplier ... paramSuppliers) { logIfEnabled(FQCN, Level.DEBUG, null, message, paramSuppliers); } @Override public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Message msg, final Throwable t) { if (isEnabled(level, marker, msg, t)) { logMessageSafely(fqcn, level, marker, msg, t); } } @Override public boolean isEnabled(final Level level, final Marker marker, final String message, final Throwable t) { return privateConfig.filter(level, marker, message, t); }
一句话总结一下:logger.isDebugEnabled()
为了提高某些情况下的性能才设计的。
参考:
作者:奔跑的笨鸟 链接:http://www.jianshu.com/p/e1eb7ebfb21e 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。