我正在考虑将java 1.4.2项目从log4j迁移到slf4j.这是参数化日志记录和代码清晰度的优点(不需要log.isdebug ..)这让我想到了这样的考虑.
是否有转换为slf4j的性能开销?
上次我检查是否可以使用logback时,它对jdk有一个要求,它要求它至少为1.5,这就是我考虑slf4j和log4j的原因.
不,你应该从slf4j获得性能优势,因为(如果你使用参数化消息),那么slf4j推迟将其参数转换为字符串,直到它检查到消息不会被日志级别过滤掉:
基于消息格式存在非常方便的替代方案.假设entry是一个对象,你可以写:
Object entry = new SomeObject();
logger.debug("The entry is {}.", entry);
Run Code Online (Sandbox Code Playgroud)
在评估是否记录之后,并且仅当决策是肯定的时,记录器实现将格式化消息并用条目的字符串值替换"{}"对.换句话说,在禁用日志语句的情况下,此表单不会产生参数构造的成本.
以下两行将产生完全相同的输出.但是,在禁用日志记录语句的情况下,第二种形式的性能将比第一种形式的性能至少提高30倍.
logger.debug("The new entry is "+entry+".");
logger.debug("The new entry is {}.", entry);
Run Code Online (Sandbox Code Playgroud)