关于日志的认知

一、日志的介绍

   日志是作为程序员做开发少不了的,我们通常通过日志来。线上问题追踪,基于日志的业务逻辑统计分析等都离不日志。目前我们最常用的框架主要是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的使用,所以就这个而言,该文章就多介绍了两句,希望各位能够给出更多的意见,如若有不合适的地方定会认真修改的。

猜你喜欢

转载自blog.csdn.net/JavaWeb_Hao/article/details/81157108