java日志框架简介

java常用日志框架类别

​ slf4j和commons logging是java领域常用的日志框架接口,这两大框架分别对应一些列日志具体实现框架,

commons logging 是Apache 开源组织下的框架,阵营中主要包括:

log4j:Apache软件基金会的 一个java项目,它是由Ceki Gülcü首创的 。

log4j 2:它是log4j的改进版本,Apache的又一个开源产品,不兼容log4j,同样具有log back的全部优点,底层采用Disruptor异步处理框架,日志处理性能更好。

slf4j阵营中包括:

log back:当前比较流行的日志框架,log4j作者创立的框架,比log4j性能有显著提高。

框架选择

在使Commons Logging时为了减少构建日志信息的开销,通常的做法是

 if(log.isDebugEnabled()){ 

​	log.debug("User name: " + user.getName() );

 }

​ 如果不进行这样的判断打印log需要先进行字符串拼接操作,如果这样的操作比较频繁会影响性能,加入判断之后能够避免不必要的字符串拼接操作,但是如果输出的日志级别比默认日志级别高会产生两次判断,这样也不是很理想。

​ 在Slf4j中,你只需这么做:

 log.debug("User name:{} ", user.getName(); 

也就是说,Slf4j把构建日志的开销放在了它确认需要显示这条日志之后,减少内存和Cup的开销,使用占位符号,代码也更为简洁。

Slf4j用法

​ slf4j只是一个日志的门面,提供日志访问接口,没有日志具体实现,提供了其他日志实现框架的桥接,这样可以很好的接入其他的日志框架,具体桥接关系见下图:

slf4j接入方式只需要加入slf4j-api-version.jar,不需要任何实现。

<dependencies> <!--只有slf4j-api依赖--> 
<dependency> 
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.13</version> 
</dependency> 
</dependencies

slf4j的实现采用Logback和采用其他组件接入方式一样,

<dependencies>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.13</version>
    </dependency>
    <!--logback-classic依赖logback-core,会自动级联引入-->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
    </dependency>
  </dependencies>

​ 在具体的项目中可能存在遗留的日志组件,各个框架采用的日志组件不同,可以统一定向到slf4j,再由具体的日志实现组件处理日志,slf4j提供了几个桥接组件,其中log4j-over-slf4j-version.jar 将log4j重定向到slf4j。

​ 在具体的实现上要避免死循环的出现,log4j-over-slf4j-version.jar与slf4j-log4j12.jar 同时出现就会出现死循环,slf4j-log4j12.jar将日志实现采用log4j,log4j-over-slf4j-version.jar又将日志重定向到slf4j,这样就出现死循环。

猜你喜欢

转载自blog.csdn.net/chens616/article/details/85333506
今日推荐