开发者社区> 问答> 正文

简述相比较于Log4J 的API,SLF4J 有哪些优势

简述相比较于Log4J 的API,SLF4J 有哪些优势

展开
收起
huc_逆天 2021-01-11 11:04:25 856 0
1 条回答
写回答
取消 提交回答
  • 技术架构师 阿里云开发者社区技术专家博主 CSDN签约专栏技术博主 掘金签约技术博主 云安全联盟专家 众多开源代码库Commiter

    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。

    2021-01-11 11:04:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_赖思超_PostgreSQL10_hash索引的WAL日志修改版final 立即下载
Kubernetes下日志实时采集、存储与计算实践 立即下载
日志数据采集与分析对接 立即下载