Log4j 提供 TRACE, DEBUG, INFO, WARN, ERROR 及 FATAL 六种纪录等级,但是 SLF4J 认为 ERROR 与 FATAL 并没有实质上的差别,所以拿掉 了 FATAL 等级,只剩下其他五种。 大部分人在程序里面会去写 logger.error(exception), 其实这个时候 Log4j 会去把这个exception tostring。真正的写法应该是logger(message. exception); 而SLF4J 就不会使得程序员犯这个错误。 Log4j 间接的在鼓励程序员使用 string 相加的写法(这种写法是有性能问题 的),而SLF4J 就不会有这个问题 , 你可以使用logger.error(“{} is+serviceid”, serviceid); 使用 SLF4J 可以方便的使用其提供的各种集体的实现的 jar。(类似 commons- logger) 从 commons–logger 和 Log4j merge 非常方便,SLF4J 也提供了一个 swing 的tools 来帮助大家完成这个merge。 提供字串内容替换的功能,会比较有效率,说明如下: // 传统的字符串产生方式,如果没有要记录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。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。