Java 日志 - zhongjiajie/zhongjiajie.github.com GitHub Wiki

JAVA-日志

主要使用的日志框架有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.
⚠️ **GitHub.com Fallback** ⚠️