一、日志门面与日志实现

日志门面:即一个统一的接口层(日志的一个抽象层);

日志实现:即项目中具体使用的哪个日志框架。

下图是目前常见和常用的日志门面是实现。

自学SpringBoot四之日志管理

而SpringBoot选择的是:SLF4jLogback

需要说明一下,JCL最后的一次更新是在2014年了,jobss-logging适用的场景过少。事实上SLF4j和Log4j,Logback都是由同一个人开发出来的,而Log4j2事实上仅仅是为了蹭Log4j的热度(这是我自己瞎想的),是由apache公司开发的一个日志框架,目前尚未得到很好的兼容。而Logback是Log4j的升级版本,性能更加的优越,因此springboot最终选择的是SLF4jLogback

注:以上观点属于个人观点,不接受反驳和喷子!

二、在SpringBoot项目中使用SLF4j

注:在真实开发项目中,我们一般都是直接调用的是接口,即抽象层的方法,再由接口去调用其实现类的方法。

SLF4j的官方文档:https://www.slf4j.org/

官方示例:

此时项目中以有SLF4j和Logback的依赖:

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
</dependency>

<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
</dependency>

官方示例一:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}

官方示例二:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
public class Wombat {
  
   final Logger logger = LoggerFactory.getLogger(Wombat.class);
   Integer t;
   Integer oldT;

   public void setTemperature(Integer temperature) {
    
     oldT = t;        
     t = temperature;

     logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);

     if(temperature.intValue() > 50) {
       logger.info("Temperature has risen above 50 degrees.");
     }
  }
} 

由于每一个日志实现的框架都有自己的配置文件,因此即便使用了slf4j接口层,但配置文件还是日志实现的配置文件

三、SLF4j对其他日志框架的兼容

SpringBoot选择的是SLF4jLogback,已经是很好的日志框架了,为什么还需要兼容其他的日志框架呢?原因在于,往往一个springboot项目同时也会依赖其他的框架,例如spring使用的是JCL,hiberbate使用的日志框架是jsboss-logging等等;如果不进行统一的日志管理,那么整个项目的日志就会显得杂乱,甚至会出现迷之错误。幸好这一点springboot已经为我们考虑到了,并作出了很好的解决方案。

即如下图所示(来源于官方文档),在这之间加一个适配层。意思就是当这个项目需要用到JCL(Jakarta Commons Logging)
日志框架的时候,在maven导入依赖时却并不导入JCL(Jakarta Commons Logging)的相关依赖,而是导入如图所示的替换依赖jar包(jcl-over-slf4j.jar),此时jcl-over-slf4j.jar会将JCL替换掉。其他的以此类推。

 

自学SpringBoot四之日志管理

未完待续~~~~

相关文章:

  • 2021-04-01
  • 2022-12-23
  • 2021-08-21
  • 2021-05-29
  • 2021-08-08
猜你喜欢
  • 2021-12-14
  • 2021-08-28
  • 2021-06-18
  • 2021-07-31
  • 2021-12-18
  • 2022-12-23
  • 2021-04-12
相关资源
相似解决方案