JAVA日志体系结构

来源:互联网 发布:微信变声软件 编辑:程序博客网 时间:2024/06/14 06:09

commons-logging和slf4j都是日志的接口,供用户使用,而没有提供实现!
log4j、logback等等才是日志的真正实现。

SLF4J解释:

SLF4J,即简单日志门面(Simple Logging Facade for Java);
从设计模式的角度考虑,它是用来在log和代码层之间起到门面的作用。对应用来说只要使用slf4j提供的接口,即可隐藏日志的具体实现。
这与jdbc很相似。使用jdbc也就避免了不同的具体数据库。使用了slf4j可以对客户端应用解耦。
因为当我们在代码实现中引入log日志的时候,用的是接口,所以可以实时的根据情况来调换具体的日志实现类。这就是slf4j的作用。
SLF4J所提供的核心API是一些接口以及一个LoggerFactory工厂类。SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,
最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统;

配置SLF4J是非常简单的一件事,只要将与你打算使用的日志系统对应的jar包加入到项目中,SLF4J就会自动选择使用你加入的日志系统;

日志系统绑定原理
在应用中,通过LoggerFactory类的静态方法getLogger()获取logger。
通过查看该类的代码可以看出,最终是通过StaticLoggerBinder.getSingleton().getLoggerFactory()方法获取LoggerFactory。
然后,在通过该具体的LoggerFactory来获取logger的。类org.slf4j.impl.StaticLoggerBinder并不在slf4j-api-1.5.2.jar包中,
仔细查看每个与具体日志系统对应的jar包,就会发现,相应的jar包都有一个org.slf4j.impl.StaticLoggerBinder的实现,
不同的实现返回与该日志系统对应的LoggerFactory,因此就实现了所谓的静态绑定,达到只要选取不同jar包就能简单灵活配置的目的。
slf4j源码解析


原创粉丝点击