帮我在辩论在这里.. :)即使使用slf4j,你应该保护你的日志吗?
这里http://www.slf4j.org/faq.html#logging_performance的SLF4J网站表示由于参数测井,录井卫兵是没有必要的。即而不是写:
if(logger.isDebugEnabled()) {
logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
}
你可以逃脱:
Object entry = new SomeObject();
logger.debug("The entry is {}.", entry);
这真的是好,或者它招致了(虽然更低)创建传递给此跟踪方法的静态字符串的成本..?
谢谢fgelz,这是最明确的解释,所以我改变了主意。让你认为,尽管有所有不同的框架,但在日志世界中仍然有创新的空间,在推迟昂贵的操作方面..也许与代表 –
@MarkD JDK 8项目Lambda将帮助创新(http:// openjdk .java.net/projects/lambda /) – fglez
你也应该知道调用可变参数方法(如logger.debug(String,Object ..)实际上是在封面logger.debug(String,new Object [所以如果你没有包装这些调用,那么你每次遍历这个方法时都会创建一个新的Object数组,即使你从来没有写过内容,如果你有一个高性能的系统或者经历内存压力,那么随着时间的推移,这可能会增加;如果使用了很多,logger.isDebugEnabled()调用将被一个体面的JIT所吸引,SLF4J专门为此提供了一个和两个参数,但是对于更多的参数流失 – AlBlue