JAVA 日志 SLF4J
主要使用的日志框架有 Log4j
, LogBack
, Log4j2
等,但是根据<阿里巴巴 Java 开发手册>有一条强制的规范,就是 不应该直接使用日志系统 (Log4j LogBack) 的 API,而应该使用日志框架 SLF4J 中的 API,使用门面模式的日志框架,有利于日志的统一处理
日志门面,是门面模式的一个典型的应用。门面模式(Facade Pattern),也称之为外观模式,其核心为:外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用。有一句计算机的说法是 计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。而门面模式就是对于这句话的典型实践 。几种日志框架都有自己单独的 API,要使用对应的框架就要使用其对应的 API,这就大大的增加应用程序代码对于日志框架的耦合性。日志门面的一个比较重要的好处——解耦。
SLF4J
Java 简易日志门面( Simple Logging Facade for Java ,缩写 SLF4J),是一套包装 Logging 框架的界面程式,以外观模式实现。可以在软件部署的时候决定要使用的 Logging 框架,目前主要支援的有 Java Logging API、Log4j 及 logback 等框架.SLF4J 其实只是一个门面服务而已,他并不是真正的日志框架,真正的日志的输出相关的实现还是要依赖 Log4j、logback 等日志框架的。
SLF4J 与 log4j 的对比:
- 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。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论