SpringBoot 1x 系列之(三)SpringBoot与日志

SpringBoot与日志

日志框架、日志配置

1. 日志框架

JDBC和数据库驱动:
JDBC是统一的接口层(抽象层),面向JDBC进行开发,而不直接面向数据库驱动,这样的好处是数据库驱动会不断的出现新产品,如果直接面向数据库驱动开发,那么,每次更换数据库驱动,开发的代码就要做相应的调整,而面向JDBC开发,不管换成什么数据库驱动,我们的代码都不需要再改了

日志框架也是沿用了JDBC和数据库驱动的思维,与他们相对于,分为日志门面(JDBC)和日志实现(数据库驱动)。

我们在使用日志框架时,就从日志门面中选一个,再从日志实现中选一个,就可以进行开发了。

目前常见的日志门面和日志实现如下
在这里插入图片描述
SpringBoot的底层是Spring,Spring的日志门面选用的是JCL,而SpringBoot选用的是SLF4j+Logback

1.1 slf4j使用原理

1.1.1 如何在项目中使用SLF4j

  1. 以后开发的时候,日志记录方法的调用,不应该直接调用日志实现的方法,而是调用日志门面(抽象层)的方法
  2. 在项目中导入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");
  }
}

在这里插入图片描述

  1. 每一个日志实现框架都有自己的配置文件,使用slf4j以后,配置文件还是使用日志实现框架本身的配置文件。

1.2 遗留问题(其他日志框架统一转换为slf4j)

问题:我们在开发系统时,假如日志框架选用了SLF4j+Logback,但当前系统又依赖于其他框架,比如Spring、Hibernate、MyBatis、...,依赖的这些框架有的又会依赖自己的日志框架,比如Spring依赖JCL,Hibernate依赖Jboss-logging,这样就出现了日志框架不统一的问题,项目依赖于多个框架,而每个框架会有自己的日志门面和日志实现
我们的解决方法是:让系统中所有的日志框架都统一到SLF4j。

  1. 将系统中其他日志框架排除出去
  2. 用原有日志框架的中间包来替换原有的日志框架
  3. 使用我们选定的日志实现框架

在这里插入图片描述

1.3 SpringBoot日志关系

SpringBoot使用spring-boot-starter-logging来做日志功能。
SpringBoot在底层的日志依赖关系
在这里插入图片描述

总结:

  1. Spring Boot底层使用slf4j+logback的方式进行日志记录
  2. Spring Boot也把其他的日志框架都替换成了slf4j(导入了中间包,统一框架)
  3. 如果我们要引入其他框架,一定要把这个框架的默认日志框架依赖移除掉
    比如,我们使用了Spring框架,就要这么做
<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的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉。

2. SLF4j+Logback日志使用

2.1 日志级别

TRACE
DEBUG
INFO
WARN
ERROR
注:上述级别自上而下由低到高,我们设定日志级别后,日志输出时只会输出设定级别及以上级别的日志信息。
在这里插入图片描述

2.2 默认配置

SpringBoot默认配置好了日志,默认的日志级别是INFO,通过logging.level指定了包的日志级别的就用指定的,没有指定的包就用SpringBoot默认规定的级别:root级别
在这里插入图片描述

2.3 常用配置

日志的默认配置是在主配置文件里的,所以我们要修改默认配置,也需要在主配置文件中修改

2.3.1 logging.level.XXX

设置某个包/类的日志级别,XXX写包/类结构,值为五个日志级别之一

2.3.2 logging.file

生成日志文件,不指定路径只给出日志文件名默认在当前项目根目录下生成
在这里插入图片描述
指定具体路径,在指定路径下生成日志文件

2.3.3 logging.path

在指定路径下生成日志文件,日志文件默认文件名为springboot.log
在这里插入图片描述
注:当同时指定logging.file和logging.path,生效的总是logging.file

2.3.4 logging.pattern.console和logging.pattern.file

logging.pattern.console 指定控制台输出的日志格式
logging.pattern.file 指定日志文件输出的日志格式
在这里插入图片描述

日志格式参考
在这里插入图片描述
示例如下
在这里插入图片描述

2.4 自定义日志配置文件

给类路径下放上每个日志框架自己的配置文件即可,这样,Spring Boot就不会使用自己的默认配置了

每个日志实现框架与配置文件的对应关系如下
在这里插入图片描述
logback.xml和logback-spring.xml的区别
logback.xml会绕过SpringBoot,直接被日志框架识别
logback-spring.xml由Spring Boot解析,可以使用SpringBoot提供的日志Profile功能(日志的多环境配置)
在这里插入图片描述
注:上述代码直接在相应的日志配置文件中使用即可,Spring Boot会对这部分内容进行解析。
示例
在这里插入图片描述

2.5 切换日志框架

spring-boot-starter-logging的底层是slf4j+Logback,假如我们需要切换为其他的日志框架组合,该怎么做呢,有两种方式可以实现。

  1. 根据slf4j的日志适配图
    以slf4j+Logback转为slf4j+log4j(reload4j)为例进行说明
    在这里插入图片描述
    注:图中的reload4j就是log4j
    首先将log4j-over-slf4j和logback-classic排除掉
    在这里插入图片描述
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <artifactId>logback-classic</artifactId>
            <groupId>ch.qos.logback</groupId>
        </exclusion>
        <exclusion>
            <artifactId>log4j-over-slf4j</artifactId>
            <groupId>org.slf4j</groupId>
        </exclusion>
    </exclusions>
</dependency>

然后增加log4j适配包
在这里插入图片描述

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-reload4j</artifactId>
    <version>1.7.35</version>
</dependency>

如果需要自定义log4j的配置文件,再把log4j的配置文件放到类路径下就可以,否则就用Spring Boot默认的

  1. 场景启动器
    以slf4j+Logback转为slf4j+log4j2为例进行说明
    在这里插入图片描述
    首先排除掉spring-boot-starter-logging
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <artifactId>spring-boot-starter-logging</artifactId>
            <groupId>org.springframework.boot</groupId>
        </exclusion>
    </exclusions>
</dependency>

然后引入spring-boot-starter-log4j2即可

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

如果需要自定义log4j2的配置文件,再把log4j2的配置文件放到类路径下就可以,否则就用Spring Boot默认的

排除jar包时,可以使用IDEA的依赖视图快速排除,pom文件下右键点击Diagrams 》Show Dendendencies
在这里插入图片描述
选中要排除的jar包,右键点击Exclude即可,然后重新加载maven依赖
在这里插入图片描述

posted @   刘二水  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示