第八章:SpringBoot配置(日志slf4j、logback)

总目录:SpringBoot学习教程


(一)市面上有很多的日志框架JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j.等。

我们的应用中一般使用的是日志的门面(日志的抽象层)框架,但是程序中真正使用的是它的实现。

例如:我们使用SLF4J日志框架,但是具体的实现是Logback。

日志门面(日志的抽象层)
日志实现
SLF4J
Logback
(二)如何在程序中使用

在开发中,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法,然后具体方法再用日志实现类去完成。

给系统里面导入slf4j的jar logback的实现jar
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与logback绑定)我的应用程序是面向SLF4J编程,调用它的方法进行日志的记录。而在程序中我也导入了日志的实现(logback),从图中可以看出,我们虽然调用的是SLF4J接口,但是具体实现是logback,真正的将日志记录到文件。

第三列:(SLF4J与log4j绑定),因为log4j比较早,当初他就没有想到SLF4J这一回事,因为后面的不断拓展才出现了这个统一抽象层。所以我们还是按照这个原理,应用程序还是统一的调用这个抽象层,但是log4j出现的时候没有考虑SLF4J的出现,然后我们就在他俩中间加入一个适配层,这个适配层就相当于上面实现了sl4j的具体方法,而在方法中间正在记录的时候,他又调用下面的log4j中的方法。

深蓝颜色的是:都是实现

绿颜色的是:都是中间的适配层,用来适配一些本来不认识slf4j的实现框架。

日志的配置 :每个日志的框架都有自己的配置文件。使用slf4j之后,配置文件还是做成日志实现框架的配置文件。

例如:slf4j提供的是统一的接口,具体实现是logback,那配置文件就写logback的。


(三)遗留问题:

       我们有一个A系统,里面使用的是(slf4j和logback)日志框架,但是这个系统还依赖spring,hibernate,mybaits等框架,而这些框架在底层也有可能用到了一些日志 ,而且还都不相同。spring中使用commons-logging记录的,hibernate用jboss-logging记录的,等等。那么,问题就出现了,这么多不统一的日志框架我们怎么办?

       统一日志记录:我让别的框架也使用slf4j,替换他们原来框架。

官网文档又提供了一张图片进行解释说明:



第一列:我们这个应用程序面向的是slf4j编程,然后真正的实现我们用的是logback。

然而我们这个应用程序还依赖别的框架,而每个框架还用到了其他的日志框架,而我想的是,让这些框架都能够统一使用slf4

怎么办呢,我们使用一些包将他们替换。(偷天换日)这个替换包中的功能和原来的一样,原来里面有啥类,这个类里面还有。

上面说的可能有点乱,下面采用尚硅谷老师的话进行一个总结:

如何让系统中所有的日志都统一到slf4j;

1、将系统中其他日志框架先排除出去;

2、用中间包来替换原有的日志框架;

3、我们导入slf4j其他的实现;


(四)SpingBoot日志关系:

一开始项目中的依赖    spring-boot-starter-web:

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

spring-boot-starter-web里面有这个spring-boot-starter依赖

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>2.0.0.RELEASE</version>
      <scope>compile</scope>
    </dependency>

spring-boot-starter下面有spring-boot-starter-logging:


SpringBoot 使用它来做日志功能:
 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-logging</artifactId>
      <version>2.0.0.RELEASE</version>
      <scope>compile</scope>
    </dependency>

总结:

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

2)、SpringBoot也把其他的日志都替换成了slf4j;

3)、中间包转换

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

SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值