1.兵马未动,日志先行
源码参考: tuguangquan/mybatis.
日志包得全貌
LogFactory,LogException,logFactoryTest,Log分析
LogFactory.java
日志工厂,这个类可以说是面向mybatis其他包的一个接入点,这个工厂类整合了各种常用的日志插件:log4j,log4j2,nolongging,slf4j,标准输出,用户自定义日志。
这个类的重点如下:
- 静态块的工作
- 外部调用入口:Log getLog(Class<?> aClass)方法->
- 构建具体日志的方法:setImplementation(Class<? extends Log> implClass),参数是不同日志的适配器,方法的返回值是这个日志构造方法。(其实是得到这个具体日志的构造方法)
LogException.java
这个类继承PersistenceException,用于异常处理。
Log.java
这个是日志的接口类。
logFactoryTest
用于测试。
Slf4j包
这个包是Slf4j日志的Adopter。在日志工厂中,静态块会调用useSlf4jLogging()方法,它再调用setImplementation(Class<? extends Log> implClass) 方法并将Slf4jImpl.class作为参数传入。在Slf4jImpl中,具体的日志加载都交给了这个日志自己的工厂方法处理,补充一点,Slf4j包中其他两个类都用来辅助的,在Slf4jImpl类的构造方法的分支语句中发挥作用。
对于剩下的包
剩下的stdout,nologging,jdk14,log4j,log4j2,commons包中的xxxImpl类都是类是的操作,使用各种的工厂方法创建日志对象。
jdbc包
记录任何JDBC语句的日志代理。暂时未发现使用的地方。
exceptions包
类图
这个包没啥可说的