08 Spring Boot如何打印日志 1.x 和2.x如何整合其它框架的日志

数据库驱动工作原理

我们在项目开发中,都需要连接到数据库;代码如下

导入mysql驱动

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.9</version>
		</dependency>

编写连接数据库代码

在这里插入图片描述

分析,什么叫“门面”

我们发现左侧一般都是jdk提供的结构,右侧是数据库厂商实现的类;这个是jdk常用的手段,你mysql厂商想接入java可以,我这里有一套接口,你实现以下,如何去连接你的数据库,如何发送一条sql到数据库执行,事务如何提交等等;对于Oracle想要接入java也是一样,也得实现java.sql下的一套规范;我们也可以称jdk提供的这套接口为门面

日志框架工作原理

系统提供门面,我们自己选择一个具体的实现

打开我们最常用的日志门面网站

slf4j官网
在这里插入图片描述

进入手册页面

这里有一段示例代码

在这里插入图片描述

SLF4J有哪些实现

上一个页面继续往下拉,可以看到下图;以后使用Slf4j做日志实现不熟悉导包可以参考这个图

  • 下图的6列表示SLF4J可以选用5种实现(第一列没有实现、最后一列表示不输出日志)
  • 第一行,说明可以整合哪些日志实现
  • 第二行,蓝色中有个灰色框这里说明需要导入的jar包slf4j-api,这个使我们的slf4j门面接口
  • 第三行,表示我们使用不同的日志实现需要导入的jar包,这一层可能是适配层,适配不直接支持的日志框架实现
  • 第四行,没有提供直接支持的情况,比如log4j.jar
    在这里插入图片描述

实例代码分析

package com.qs;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import java.sql.Connection;
import java.sql.DriverManager;

@Component
public class DBConnection {
	//构建日志对象
    Logger logger = LoggerFactory.getLogger(DBConnection.class);

    @Bean
    public Connection  getConn(){

        try {
            Class.forName("com.mysql.jdbc.Driver");
            return DriverManager.getConnection("jdbc:mysql:///mysql", "root", "1234567890");
        }catch (Exception e){
        	//使用日志对象打印error级别的日志,{}是占位符,e.getMessage()的内容填充{}
            logger.error("数据库连接错误:{}",e.getMessage());
        }finally {
        	//使用日志对象打印info级别的错误
            logger.info("数据库连接成功!");
        }
        return null;
    }
}

输出结果

这是默认的输出样式,是可以进行配置的
error级别的日志没有打印是因为现在没有连接数据库失败,是不是很智能

在这里插入图片描述

startle

我们并没有导入日志的实现,但是有输出;和我上面说的还要导包是不是有偏差;这是因为springboot默认选择了logback作为门面的实现,jar包都倒好了的原因

实际开发会遇到的问题

问题

日志是个好东西,大家都会使用到这个;那这样就会有问题了,我们开发项目可能会导入如下的这些框架
在这里插入图片描述

  • 问题:a框架用commons-logging,b框架用jboss-logging,c框架有其他的;那这样不就很乱了嘛;既然是一样项目,我们更希望项目中的日志输出是统一的样式;第一:好看,第二:后期收集日志分析更容易

如何解决呢?

进到leagcy APIs找一张图

在这里插入图片描述

解决思路:

官方提供了很多图,这里选择其中一张说明,这张图说明的问题是:
一个系统中用到了4个框架,然而这四个框架中包含四种日志实现;
1、logback
2、commons-logging
3、log4j
4、java.util.logging
那么此时就是我们就会出现日志不统一的情况,怎么办呢?

  • 比如我们想统一使用logback来做实现,

    • (1)把commons-logging的jar包替换成jcl-over-slf4j.jar
    • (2)把log4j的jar包替换成log4j-over-slf4j.jar
    • (3)导入juc-to-slf4j.jar的jar包
  • 大家学过maven的话,只需要在pom文件的dependence标签中使用exclusive字标签排除相应的jar包,添加新的jar包就可以解决问题。
    在这里插入图片描述

SpringBoot采用的日志

门面是谁

slf4j 全称(Simple Logging Facade For Java)
在这里插入图片描述

选择的实现是谁

logback

Spring Boot 日志架构方式

【1】在pom文件中右键,选择下图菜单

在这里插入图片描述

【2】按住control放大,找到如下内容

这张图看的不是很清楚的话看下一张图

在这里插入图片描述

【2】另一种查看依赖的方式

在这里插入图片描述

在开发中导入了其它框架,不同的日志实现怎么办

  • 1.x版本 需要排除就的日志包
    在这里插入图片描述
  • 2.x版本 啥都不用管
    在这里插入图片描述
    总结:这也是springboot一直发布新版本的原因,功能原来越NB;这种麻烦的事情spring boot都帮我们考虑进去了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值