Mybatis(七)Mybatis的日志体系

在介绍Mybatis日志实现前,我们先了解下java的日志体系以及日志框架的发展,目前比较常用的日志框架有下面几个:

而JCL和SLF4J属于日志接口(没有日志具体实现),提供统一的日志操作规范,而日志的实际功能逻辑是由具体的日志实现框架完成的(例如log4j、log4j2、logback等)。

 

 

二、Mybatis的日志实现

 Mybatis通过Log接口来定义日志操作规范,接口内容如下:

 Log实现类的逻辑比较简单,我们以Log4jImpl实现类为例 :

在Log4jImpl构造方法中,获取Log4j框架中的Logger对象,让后将日志的输出操作委托给这个Logger对象完成。其他日志实现类也是类似的。

Mybatis支持7种不同的日志输出策略,而在他是如何确认使用哪种日志?

Mybatis的Log实例采用工厂模式创建,下面是使用LogFactory获取Log的代码案例:

 LogFactory还提供了其他方法用来指导哪种日志实现类输出日志:

可以看到,这些方法都会调用setImplementation该方法指定对应的日志实现类。我们看下这个方法:

首先获取Constructor对象,然后赋值给LogFactory的logConstructor属性,所以我们调用LogFactory类的useLog4JLogging方法时,就会使用到这个实现类进行输出日志,而Log4jImpl实现类又交给Log4J框架的去输出日志,这样就达到了使用log4j去输出日志的效果。

 当我们没有指定使用哪种日志实现时,mybatis会按照顺序在Classpath下的日志框架相关的jar包,存在则使用其进行打印日志。

下面我们讲究mybatis怎么动态查找日志框架的实现细节,在LogFactory类中有一个初始化代码块:

如上面代码,调用LogFactory类的tryImplementation方法确认日志实现类,该方法入参为Runnable的匿名对象,在run方法中调用useSLF4JLogging等方法知道日志实现类。 tryImplementation方法的具体代码:(这里不是使用java的多线程,只是命名相同了)

 

在mybatis中,我们可以通过知道logImpl参数来设置使用哪种框架输出日志(需要先导入相应jar包依赖),例如:

 

另外Configuration类中维护了一个logImpl属性:

小结:

 

 

现在比较常用的是SLF4J+log4j2、SLF4J+logback的日志体系

Java的常用日志技术(三)Log4j2及Log4j2与slfj整合详解_log4j2 slf4j_爱吃面的猫的博客-CSDN博客

【Java】# 在项目中使用SLF4J+Logback来记录日志_LRcoding的博客-CSDN博客

logback依赖导入时不需要导入桥接的依赖,logback-classic中直接对Slf4j进行了实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值