比较 SLF4J 与 log4j

SLF4J :JAVA简易日志门面Simple Logging Facade for Java,缩写SLF4J)php

他是一套包装Logging 框架的接口程式,以外观模式实现。可在软件部署的时候决定要使用的 Logging 框架,目前主要支援的有Java Logging APIlog4jlogback等框架。以MIT 受权方式发布。java

SLF4J 做者就是 log4j 的做者 Ceki Gülcü,他宣称 SLF4J 比 log4j 更有效率,比 Apache Commons Logging (JCL) 简单、稳定。程序员


SLF4J 与 log4j 的比较:框架

一、log4j 提供 TRACE, DEBUG, INFO, WARN, ERROR 及 FATAL 六种纪录等级,可是 SLF4J 认为 ERROR 与 FATAL 并无实质上的差异,因此拿掉了 FATAL 等级,只剩下其余五种。编码


二、大部分人在程序里面会去写logger.error(exception),其实这个时候log4j回去把这个exception tostring。真正的写法应该是logger(message.exception);而slf4j就不会使得程序员犯这个错误。spa


三、log4j间接的在鼓励程序员使用string相加的写法,而slf4j就不会有这个问题 ,你可使用logger.error("{} is+serviceid",serviceid);debug


四、使用slf4j能够方便的使用其提供的各类集体的实现的jar。(相似commons-logger)日志


五、从commons--logger和log4j merge很是方便,slf4j也提供了一个swing的tools来帮助你们完成这个merge。code


六、提供字串内容替换的功能,会比较有效率,说明以下:接口

//传统的字符串产生方式,若是没有要记录Debug等级的信息,就会浪费时间在产生没必要要的信息上
logger.debug("There are now " + count + " user accounts: " + userAccountList);

//为了不上述问题,咱们能够先检查是否是开启了Debug信息记录功能,只是程序的编码会比较复杂
if (logger.isDebugEnabled()) {
    logger.debug("There are now " + count + " user accounts: " + userAccountList);
}

//若是Debug等级没有开启,则不会产生没必要要的字符串,同时也能保持程序编码的简洁
logger.debug("There are now {} user accounts: {}", count, userAccountList);


七、SLF4J 只支持 MDC,不支持 NDC。

相关文章
相关标签/搜索