在利用log4j打印日志时,大部分情况下日志信息都是固定的,但有些时候日志的信息中带有参数化信息,此时可以通过拼接字符串来打印:
logger.debug("参数为:" + i);
此种情况下,如果日志级别为INFO,仍要进行一次字符串拼接的操作,为了节省资源,我们可以先检查是不是开启了Debug信息记录功能:
if (logger.isDebugEnabled()) {
logger.debug("参数为:" + i);
}
但是这样程序的编码会看起来比较复杂。结合slf4j后,可以避免这个问题。
logger.debug("参数为:{}", i);
两者调用方式区别如下:
log4j:
import org.apache.log4j.Logger;
public class Test {
private static Logger logger = Logger.getLogger(Test.class);
}
slf4j:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Test {
private static Logger logger = LoggerFactory.getLogger(Test.class);
}
引用了不同的logger实现类。
总结:slf4j是一个日志门面,目前支持 Java Logging API、log4j及logback等大部分的日志框架,按照log4j作者的说法,slf4j比log4j更有效率。所以建议在程序中使用slf4j。