Mybatis日志模块采用了适配器模式,在JAVA开发中,常用的日志框架有Log4j、Log4j2、java.util.logging、slf4j等,这些工具对外的接口不尽相同,为了统一这些工具的接口,Mybatis定义了一套统一的日志接口供上层使用。
public interface Log{
void debug(String s);
...
}
import org.apache.ibatis.logging.Log;
import org.slf4j.Logger;
class slf4jLoggerImpl implements Log{
private final Log log;
public slf4jLoggerImpl(Logger logger){
this.log=logger;
}
@Override
public void debug(String s){
log.debug(s);
}
}
从上面的例子中,我们可以看到,无论我们想使用哪种日志模块,统一用
Log log.debug(s)
那我们在实例化Log的时候,到底Log log=new Log4jimpl();还是Log log=new slf4jimpl(); 完全可以交给工厂去完成。