日志框架的使用------SLF4j+logback(上)

前言

日志是我们在开发中经常用到的,以前一直看文档,了解使用,今天将日志框架的东西回顾一下,写个博文加深理解.

正文

目前市面上有很多的日志框架:JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j等,在这些众多的框架中,要想选择适合自己项目的日志框架,就要对日志的体系有一定的了解.

日志分为抽象层和实现层,一般来说,我们调用的都是抽象层的方法,具体在程序使用的时候,才会根据你所用的实现框架去调用不同的方法.

以上列举的日志框架中,其抽象层和实现层可以按照以下的几种来区分.

抽象层:

​ JCL(jakarta Commons Logging)

​ SLF4j(Simple Logging Facade for Java)

​ Jboss-logging

实现层:

  • ​ Log4j
  • ​ Jul(java.util.logging)
  • ​ Log4j2
  • ​ Logback

在SpringBoot中,选用的是SLF4J和logback,所以这一系列中就来学习logback的使用.

  1. SLF4j的使用

    查看官方的api可以看到一个例子:

    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");
      }
    }
    		
    

在官方的网站,有下面一张图来说明SLF4j的使用:

在这里插入图片描述

每一个日志框架的实现层都有自己的配置文件,在使用slf4j的时候,配置文件的使用还是要按照具体的实现框架来使用.

  1. 以前的项目中使用别的日志,如何切换到SLF4j?

    有的时候,我们的项目其他的框架使用的日志框架并不是SLF4j,如何来改变呢? 依旧是在官方有解决方案:

在这里插入图片描述

具体的步骤如下:

  1. 将系统中的其他日志框架先排除出去
  2. 用如图所示的中间包来替换原有的日志框架
  3. 导入slf4j的其他实现

我们可以查看SpringBoot的jar包依赖关系,来探究SprinBoot到底是如何自动更换其他框架的日志jar的:

首先,在SpringBoot的jar包中,有这样的一个引入:

<dependency>        
	<groupId>org.springframework.boot</groupId>            
	<artifactId>spring‐boot‐starter</artifactId>            
</dependency> 

我们进入这个依赖的pom, 可以找到它要的日志:

<dependency>    
	<groupId>org.springframework.boot</groupId>            
	<artifactId>spring‐boot‐starter‐logging</artifactId>            
</dependency> 

使用IDEA查看依赖间的关系,可以看到:

在这里插入图片描述

通过这些依赖的关系,我们可以看到:

  1. SpringBoot底层也是使用slf4j+logback的方式进行日志记录

  2. SpringBoot把其他的日志都换成了slf4j;

  3. 替换了包以后,在具体使用的时候,使用的是SLF4j的实现

    @SuppressWarnings("rawtypes")
    public abstract class LogFactory {
        static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J =
    "http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j";
        static LogFactory logFactory = new SLF4JLogFactory();
    
  4. 如果我们要引入其他的框架,且这个框架使用的日志不是SLFj的时候,需要把它的默认日志依赖排除.

因为spring使用的日志是commons-logging,所以SpringBoot的依赖中已经排除了:

<dependency>        
    <groupId>org.springframework</groupId>            
    <artifactId>spring‐core</artifactId>            
    <exclusions>            
        <exclusion>                
            <groupId>commons‐logging</groupId>                    
            <artifactId>commons‐logging</artifactId>                    
        </exclusion>                
	</exclusions>            
</dependency> 

spring boot能自动的适配所有的日志,底层使用SLF4j+logback的方式记录记录日志,引入其他框架的时候,值需要把这个框架依赖的日志框架排除即可.

总结

在本篇博文中,我们对日志的分类以及spring和springboot的底层日志的使用做了了解,在使用其他日志切换的时候,切记要排除默认的依赖.在下一篇博文中,我将学习日志的具体的使用,以及日志框架切换的具体方法!

猜你喜欢

转载自blog.csdn.net/xiaoyao2246/article/details/82878211