概述
日志方案分类
在Java生态体系中,围绕着日志,有很多成熟的解决方案。关于日志输出,主要有两类工具。一类是日志框架,主要用来进行日志的输出的,比如输出到哪个文件,日志格式如何等。 另外一类是日志门面,主要一套通用的API,用来屏蔽各个日志框架之间的差异的。
一类是日志框架,主要用来进行日志的输出的,比如输出到哪个文件,日志格式如何等。 (log4j,logback)
另外一类是日志门面,主要一套通用的API,用来屏蔽各个日志框架之间的差异的。commons-logging和SLF4J的功能是类似的,主要是用来做日志 门面的。提供更加好友的API工具。
SLF4J优点
Java简易日志门面(Simple Logging Facade for Java,缩写SLF4J),是一套包装Logging 框架的界面程式,以外观模式实现。可以在软件部署的时候决定要使用的 Logging 框架,目前主要支援的有Java Logging API、Log4j及logback等框架。以MIT 授权方式发布。
SLF4J 的作者就是 Log4j 的作者 Ceki Gülcü,他宣称 SLF4J 比 Log4j 更有效率,而且比 Apache Commons Logging (JCL) 简单、稳定。
其实,SLF4J其实只是一个门面服务而已,他并不是真正的日志框架,真正的日志的输出相关的实现还是要依赖Log4j、logback等日志框架的。
由于SLF4J比较常用,这里多用一些篇幅,再来简单分析一下SLF4J,主要和Log4J做一下对比。相比较于Log4J的API,SLF4J有以下几点优势:
- 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。
建议
所以,对于Java工程师来说,关于日志工具的使用,最佳实践就是在应用中使用如Log4j + SLF4J
这样的组合来进行日志输出。
这样做的最大好处,就是业务层的开发不需要关心底层日志框架的实现及细节,在编码的时候也不需要考虑日后更换框架所带来的成本。这也是门面模式所带来的好处。所以请不要在你的Java代码中出现任何Log4j等日志框架的API的使用,而是应该直接使用SLF4J这种日志门面。
参考:
http://www.hollischuang.com/archives/3000
最后
以上就是勤劳冰淇淋为你收集整理的springcloud| 日志方案日志方案分类SLF4J优点建议的全部内容,希望文章能够帮你解决springcloud| 日志方案日志方案分类SLF4J优点建议所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复