84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
人生最曼妙的风景,竟是内心的淡定与从容!
首先,你需要了解一个设计模式:适配器模式。
Java用来记录日志的库有很多,例如有JDK自带的Logger、Log4j、Logback,它们之间互相不兼容,通常情况下,我们写代码的时候选用其中一个就可以了。
但是,如果有一天你写的代码开源了,要给别人使用,那么问题就来了,该使用哪个日志库?当然不能随便选用一个了,因为你不知道使用你的开源库的人用的哪个日志框架。这时候你想无论别人使用哪个日志框架,你都可以兼容,这时候就要使用commons-logging或slf4j了。所以一般开源框架都不会使用具体的日志框架,而是用commons-logging或slf4j处理日志,这样可以根据使用者使用的具体日志框架来记录日志,例如Hibernate用的是slf4j(不过好像最新版本用的是JBOSS的适配器了)、Spring用的是commons-logging。
Java在日志这块不像JDBC,JDBC有一套共同的标准API,无论你连接Oracle、MySQL,API接口都是一样的。但是日志库JDK Logger、Log4j、Logback是互相不兼容的,没有共同的Interface,所以commons-logging、slf4j通过适配器模式,抽象出来一个共同的接口,然后根据使用的具体日志框架来实现日志。
总结一下,就是JDK Logger、Log4j、Logback是具体的日志框架的实现,commons-logging、slf4j是解决日志框架之间不兼容而抽象出来的适配器接口。
最后,这篇博客是我对slf4j的源码解析,希望对你有帮助:http://blog.csdn.net/xiao__gui/article/details/32695647
有的是接口,有的是实现。slf4j是log4j的升级版,都实现commons-logging。
slf4j是一个log的facade,你可以选择底层是使用commons-logging,log4j,logback等具体的实现。
首先,你需要了解一个设计模式:适配器模式。
Java用来记录日志的库有很多,例如有JDK自带的Logger、Log4j、Logback,它们之间互相不兼容,通常情况下,我们写代码的时候选用其中一个就可以了。
但是,如果有一天你写的代码开源了,要给别人使用,那么问题就来了,该使用哪个日志库?当然不能随便选用一个了,因为你不知道使用你的开源库的人用的哪个日志框架。这时候你想无论别人使用哪个日志框架,你都可以兼容,这时候就要使用commons-logging或slf4j了。所以一般开源框架都不会使用具体的日志框架,而是用commons-logging或slf4j处理日志,这样可以根据使用者使用的具体日志框架来记录日志,例如Hibernate用的是slf4j(不过好像最新版本用的是JBOSS的适配器了)、Spring用的是commons-logging。
Java在日志这块不像JDBC,JDBC有一套共同的标准API,无论你连接Oracle、MySQL,API接口都是一样的。但是日志库JDK Logger、Log4j、Logback是互相不兼容的,没有共同的Interface,所以commons-logging、slf4j通过适配器模式,抽象出来一个共同的接口,然后根据使用的具体日志框架来实现日志。
总结一下,就是JDK Logger、Log4j、Logback是具体的日志框架的实现,commons-logging、slf4j是解决日志框架之间不兼容而抽象出来的适配器接口。
最后,这篇博客是我对slf4j的源码解析,希望对你有帮助:http://blog.csdn.net/xiao__gui/article/details/32695647
有的是接口,有的是实现。slf4j是log4j的升级版,都实现commons-logging。
slf4j是一个log的facade,你可以选择底层是使用commons-logging,log4j,logback等具体的实现。