我正在考虑将java 1.4.2项目从log4j迁移到slf4j。这是参数化日志记录和代码清晰度的优点(不需要log.isdebug ..)这让我想到了这样的考虑。
是否存在转换为slf4j的性能开销?
上次我检查是否可以使用logback时,它对jdk有一个要求,它要求它至少为1.5,这就是为什么我在考虑slf4j和log4j。
答案 0 :(得分:9)
不,你应该从slf4j获得性能优势,因为(如果你使用参数化消息),那么slf4j defers turning its parameters to strings until it has checked that the message won't be filtered out by log level:
基于消息格式存在非常方便的替代方案。假设entry是一个对象,你可以写:
Object entry = new SomeObject();
logger.debug("The entry is {}.", entry);
在评估是否记录之后,并且只有在决定是肯定的情况下,记录器实现才会格式化消息并将“{}”对替换为条目的字符串值。换句话说,如果禁用了日志语句,则此表单不会产生参数构造的成本。
以下两行将产生完全相同的输出。但是,如果禁用日志记录,第二种形式的性能将比第一种形式的性能提高至少30倍。
logger.debug("The new entry is "+entry+".");
logger.debug("The new entry is {}.", entry);