因为logback-classic里的logger实现了SLF4J的Logger接口,某些打印方法可接受多个参数。这些不同的打印方法主要是为了在提高性能的同时尽量不影响代码可读性。
对于某个Logger,下面的代码logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
在构造消息参数时有性能消耗,即把整数i和entry[i]都转换为字符串时,还有连接多个字符串时。不管消息会不会被记录,都会造成上述消耗。
一个可行的办法是用测试语句包围记录语句以避免上述消耗,比如:if(logger.isDebugEnabled()) {
logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
}
当logger的debug级别被禁用时,这个方法可以避免参数构造带来的性能消耗。
另一方面,如果logger的DEBUG级别被启用,那么会导致两次评估logger是否被启用:一次是isDebugEnabled方法,一次是debug方法。
在实践中,这种额外开销无关紧要,因为评估logger所消耗的时间不足实际记录请求所用时间的1%。
REF:[url]http://cwiki.ossez.com/pages/viewpage.action?pageId=4719684[/url]