一、日志的介绍
日志是作为程序员做开发少不了的,我们通常通过日志来。线上问题追踪,基于日志的业务逻辑统计分析等都离不日志。目前我们最常用的框架主要是log4j、slf4j、logback、logging。
二、log4j、slf4j、logback三者的区别
其实slf4j是一系列的日志接口,而log4j和logback是具体实现了日志的框架。因为是接口,所以在项目中如果你不引用log4j、logback或者其他一些日志框架时,控制台的输出是这样的。
从运行的结果可以看出,由于没有给出准确的logger事务实现,无法在控制台输出日志,也就是说我们在开发中需要绑定一个日志框架 才能够正常的使用slf4j。
log4j和logback时两个非常受欢迎的日志框架,但是两者又是不同的: log4j是apache实现的一个开源的日志组件 logback同样是log4j的作者完成的,拥有更好的特性,用来取代log4j的一个日志框架,是slf4j的原生实现 从源码我们可以看到logback是直接实现了slf4j的接口,而log4j不是slf4j的原生实现,所以slf4j api在调用log4j时需要一个适配层 logback实现slf4j是不消耗内存和计算开销的。
小总结:
1、slf4j是java的一个日志门面,实现了日志框架一些通用的api,log4j和logback是具体的日志框架 2、他们可以单独的使用,也可以绑定slf4j一起使用 单独使用时,分别调用 框架自己的方法来输出日志信息 绑定slf4j一起使用时,调用slf4j的api来输入日志信息,具体实现和底层的日志框架无关(需要底层框架的配置文件) 3、很显然,我们不推荐单独使用日志框架,假设项目中已经使用了log4j,而我们此时加载了一个类库,而这个类库依赖于另外一个 日志框架,这个时候我们就需要维护两个日志框架,这是一个很麻烦的事情,而使用了slf4j就不同了,由于应用调用的是抽象的api,与底层日志框架无关,因此可以任意更换日志框架
三、log4j和slf4j和结合使用
1、需要引入的jar包
当log4j和slf4j结合使用时,需要引入三个jar,log4j.jar、slf4j-log4j.jar、slf4j-api.jar,简单来说就是,slf4j.jar的主要是作为一个门面,简化记录日志的操作,log4j.jar是记录日志的具体实现,而slf4j-log4j.jar是作为一个工厂,slf4j使用工厂 来生产log4j的日志记录器。
2、需要一个日志文件log4j.properties
log4j.rootLogger=ERROR,stdout
log4j.logger.com.endeca=INFO
# Logger for crawl metrics
log4j.logger.com.endeca.itl.web.metrics=INFO
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%p\t%d{ISO8601}\t%r\t%c\t[%t]\t%m%n
3、注意
一定要谨记系统是默认加载src下面的日志配置文件的,所以,最好再项目下面建立一个SourceFolder,将配置文件放到其中。
四、commons-logging和slf4j
commons-logging和slf4j都是日志的接口,供用户使用,而没有提供实现! log4j,logback等等才是日志的真正实现。 当我们调用接口时,接口的工厂会自动寻找恰当的实现,返回一个实现的实例给我服务。这些过程都是透明化的,用户不需要进行任何操作! 这里有个小故事,当年Apache说服log4j以及其他的日志来按照commons-logging的标准编写,但是由于commons-logging的类加载有点问题,实现起来也不友好,因此log4j的作者就创作了slf4j,也因此而与commons-logging两分天下。至于到底使用哪个,由用户来决定吧。 这样,slf4j出现了,它通过简单的实现就能找到符合自己接口的实现类,如果不是满足自己标准的日志,可以通过一些中间实现比如上面的slf4j-log4j12.jar来进行适配。 五、总结
个人推荐使用slf4j和log4j的使用,所以就这个而言,该文章就多介绍了两句,希望各位能够给出更多的意见,如若有不合适的地方定会认真修改的。