slf4j原理
1.slf4j只是一个壳,一个通用的壳
SLF4J不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
2. 如果你打算发布一个类库或者组件,可以使用slf4j,这样不过将来用在什么地方,打log都不会有任何影响
3. 在实际使用中,我们通过LoggerFactory.getLogger()获得logger,查看LoggerFactory的源代码会发现如下两点,
- LoggerFactory通过StaticLoggerBinder.getSingleton().getLoggerFactory()获得LogFactory,然后再通过该LogFactory来获取logger的
- 但是StaticLoggerBinder类并不在slf4j-api-1.5.10.jar中,分析与具体日志系统相关的jar包,会发现每个 jar包都有一个StaticLoggerBinder类的实现(如slf4j-log4j12-1.5.10.jar、slf4j-simple- 1.5.10.jar、slf4j-jdk14-1.5.10.jar均有StaticLoggerBinder类实现),这就很明白了,slf4j在启动时会动态到classpath中查找StaticLoggerBinder类,找到之后就可以生成对应日志系统的日志文件了
4. Apache Commons Logging 和 slf4j也一样,都是Depends on the underlying framework,不过听说commons logging是按顺序查询具体日志系统,commons logging.jar本身带有所有日志系统的Facade了,无须在使用时再按照具体日志系统添加依赖。