看一看mybatis的日志实现
想debug流程的,可以跟我github代码。
https://github.com/unclehh/mybatis-review.git
这是基本使用:
@Test
public void log() {
LogFactory.useLog4JLogging();
Log log = LogFactory.getLog(LogFactoryTest.class);
logSomething(log);
assert log.getClass().getName() == Log4jImpl.class.getName();
}
这里是在静态代码块里,加载所有的log实现类,包括slf4j、common logging、log4j2、log4j、jdk logging、no logging。
举log4j的例子,mybatis会加上log4j的依赖,Log4jImpl通过log4j实现Log的四种日志级别。
LogFactory.useLog4JLogging(),第一步会初始化Logfactory的logConstructor构造器,mybatis对上面几种log按顺序加载,如果加载成功了一个,后面的就不会再加载了。
在第一步的基础上,有了特定的构造器,就可以获取特定的log对象了。
mybatis的日志系统,使用工厂模式,包装模式,代理模式,使之扩展性很好。