slf4j + logback
如果我们记录DEBUG日志,并设置只记录>=INFO级别的日志,程序是否也会耗时1秒呢?我们使用三种方法来测试:
- 拼接字符串方式记录slowString;
- 使用占位符方式记录slowString;
- 先判断日志级别是否启用DEBUG。
log.debug(“debug1:” + slowString(“debug1”));
log.debug(“debug2:{}”, slowString(“debug2”));
if (log.isDebugEnabled()){log.debug(“debug3:{}”, slowString(“debug3”));} //这种效率高
使用占位符方式记录slowString的方式,同样需要耗时1秒,是因为这种方式虽然允许我们传入Object,不用拼接字符串,但也只是延迟(如果日志不记录那么就是省去)了日志参数对象.toString()和字符串拼接的耗时。
使用{}占位符语法不能通过延迟参数值获取,来解决日志数据获取的性能问题。
如果你的日志量很大,获取日志参数代价也很大,就
要进行相应日志级别的判断,避免不记录日志也要花费时间获取日志参数的问题。