mybatis 日志的使用以及设计

1、为什么要配置mybtis的logger?

mybatis自己设计以及实现了org.apache.ibatis.logging.Log接口。

Mybatis为了避免对第三方的日志包存在强依赖,内部的Log采用了代理模式。通过配置的方式,代理真实的日志对象

如果没有配置log,mybatis会按照以下顺序尝试加载Log:SL4j->Common logging->log4j2->log4j->jdkLoging->noLogging

 1   static {
 2     tryImplementation(new Runnable() {
 3       @Override
 4       public void run() {
 5         useSlf4jLogging();
 6       }
 7     });
 8     tryImplementation(new Runnable() {
 9       @Override
10       public void run() {
11         useCommonsLogging();
12       }
13     });
14     tryImplementation(new Runnable() {
15       @Override
16       public void run() {
17         useLog4J2Logging();
18       }
19     });
20     tryImplementation(new Runnable() {
21       @Override
22       public void run() {
23         useLog4JLogging();
24       }
25     });
26     tryImplementation(new Runnable() {
27       @Override
28       public void run() {
29         useJdkLogging();
30       }
31     });
32     tryImplementation(new Runnable() {
33       @Override
34       public void run() {
35         useNoLogging();
36       }
37     });
38   }

加载具体Logger的方式:

通过调用具体Logger的构造函数,反射出。

private static void setImplementation(Class<? extends Log> implClass) {
    try {
      Constructor<? extends Log> candidate = implClass.getConstructor(String.class);
      Log log = candidate.newInstance(LogFactory.class.getName());
      if (log.isDebugEnabled()) {
        log.debug("Logging initialized using '" + implClass + "' adapter.");
      }
      logConstructor = candidate;
    } catch (Throwable t) {
      throw new LogException("Error setting Log implementation.  Cause: " + t, t);
    }
  }
原文地址:https://www.cnblogs.com/marioS/p/10392057.html