mybatis 源码分析三、日志框架的实现

mybatis 日志框架的实现

一般我们如果需要指定mybatis使用的日志时都会在xml中通过setting标签进行配置,它常用的标签属性有SLF4J 、LOG4J 、 LOG4J2 、 JDK_LOGGING 、COMMONS_LOGGING 、STDOUT_LOGGING、NO_LOGGING、

<settings>
   <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

可以发现mybatis配置的日志属性基本上都是我们常用的一些日志框架,那mybatis是如何将他们整合到一起的呢?接下来我们可以看一下源码。
找到mybatis源码中logging包的位置可以看到一个大概的目录结构,看到这个包结构,有没有很熟悉?可以看到这些其实都是mybatis内置的日志框架处理。那他们是怎么将它们整合到一起的呢?
在这里插入图片描述

通过看源码发现他采用了适配器的模式去整合的这些日志框架,首先它定义了一个Log接口,然后让这些日志框架实现这个接口来进行整合。

在这里插入图片描述

我们先分析一下log4j这个框架它是如何整合的,看Log4jImpl源码
在这里插入图片描述

可以看到它实现了log接口,其实我们主要查看它的构造器。可以看到它定义了一个log类成员变量。并将其赋值

public Log4jImpl(String clazz) {
    log = Logger.getLogger(clazz);
  }

Logger.getLogger 这个方法其实就是获取的Log4j里面的logger日志输出对象,像下面的那些debug,error这些日志输出的方法最终都是通过Log4j进行调用的。所以其实执行的是Log4j里面的方法。这样Log4jImpl就完成了对Log4j的适配。同理,我们在看一下 Slf4jImpl。

在这里插入图片描述
其实原理都是一样的,通过构造器去获取我们日志框架中的日志输出对象,然后再复制给类的成员变量,最终调用的方法都是调用的日志框架中的方法。这样就完成了对这个日志框架的适配,其他的实现类就由大家一起看了。那它是如何加载的呢?可以看到这里我们解析了 logimpl标签,就是在这里设置的我们具体使用的实现类。
在这里插入图片描述
这里其实就是解析的我们的标签然后注入对应的实现类。
在这里插入图片描述
在这里通过 *LogFactory.useCustomLogging 使用我们自己定义的日志框架。
在这里插入图片描述
在这里插入图片描述
获取我们设置的日志框架的构造器让后在实例化获取log对象。这样就完成了我们setting设置的日志框架的注入了。
mybatis的日志使用,主要LogFactory这个类来使用日志里面定义了,使用日志的方法。
在这里插入图片描述
mybatis日志框架的底层源码到这里就结束了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

久★伴i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值