Java日志框架——Mybatis选用的日志框架解决方案

Mybatis选择"Mybatis日志抽象层+第三方日志框架"组合方案作为Mybatis的日志框架解决方案。


一、Mybatis日志抽象层

Mybatis日志抽象层主要包含两个类:org.apache.ibatis.logging.Log和org.apache.ibatis.logging.LogFactory。


二、第三方日志框架
Mybatis运行时动态确定所使用的第三方日志框架。
在我们执行"org.apache.ibatis.logging.Log log=org.apache.ibatis.logging.LogFactory.getLog(Main.class);"的语句的时候,具体有以下几个步骤:
1)在org.apache.ibatis.logging.LogFactory中,有如下静态加载语句。
即当我们加载org.apache.ibatis.logging.LogFactory类的时候,首先会去动态确定使用哪个第三方日志框架。第三方日志框架被选用的优先级顺序从大到小为:SLF4J,JCL,Log4J,Java Logging API,NOP日志框架(Mybatis自己实现)。
static {
        tryImplementation(new Runnable() {
            public void run() {
                LogFactory.useSlf4jLogging();
            }
        });
        tryImplementation(new Runnable() {
            public void run() {
                LogFactory.useCommonsLogging();
            }
        });
        tryImplementation(new Runnable() {
            public void run() {
                LogFactory.useLog4J2Logging();
            }
        });
        tryImplementation(new Runnable() {
            public void run() {
                LogFactory.useLog4JLogging();
            }
        });
        tryImplementation(new Runnable() {
            public void run() {
                LogFactory.useJdkLogging();
            }
        });
        tryImplementation(new Runnable() {
            public void run() {
                LogFactory.useNoLogging();
            }
        });
}
2)当Mybatis动态确定了所使用的第三方日志框架后,执行"org.apache.ibatis.logging.Log log=org.apache.ibatis.logging.LogFactory.getLog(Main.class);"语句,会返回一个适配器实例,该适配器类继承"org.apache.ibatis.logging.Log"类,里面包含对第三方日志框架的日志记录类的引用。
以这个"org.apache.ibatis.logging.slf4j.Slf4jLoggerImpl"适配器类为例,它的类声明部分片段如下:
package org.apache.ibatis.logging.slf4j;


import org.apache.ibatis.logging.Log;
import org.slf4j.Logger;


class Slf4jLoggerImpl implements Log {
    private Logger log;
}


你可能感兴趣的:(Java日志框架——Mybatis选用的日志框架解决方案)