我们在使用Log时一般是这样定义Log的:Log log = LogFactory.getLog(class)。
mybatis也不例外,通过分析源码发现mybatis自己定义了Log和LogFactory,而没有采用我们通用的commons-logging或者slf4j-api。这样可以最少化对第三方日志框架的依赖性。
mybatis类之间的关系(工厂模式+状态模式)如下图所示:
从上图可以看出,它对不过是对org.slf4j、org.apache.commons.logging、org.apache.log4j、java.util.logging等六种Log框架的同时封装。
在加载LogFactory时,首先执行静态代码块,来决定使用何种日志框架。从代码中可以看到,采用日志框架是有先后顺序的。
static {
tryImplementation(new Runnable() {
public void run() {
useSlf4jLogging();
}
});
tryImplementation(new Runnable() {
public void run() {
useCommonsLogging();
}
});
tryImplementation(new Runnable() {
public void run() {
useLog4JLogging();
}
});
tryImplementation(new Runnable() {
public void run() {
useJdkLogging();
}
});
tryImplementation(new Runnable() {
public void run() {
useNoLogging();
}
});
}
private static void tryImplementation(Runnable runnable) {
if (logConstructor == null) {
try {
runnable.run(); // 不是启动新线程,而是普通的函数调用。
} catch (Throwable t) {
// ignore
}
}
}
public static synchronized void useSlf4jLogging() {
setImplementation("org.apache.ibatis.logging.slf4j.Slf4jImpl");
}
public static synchronized void useCommonsLogging() {
setImplementation("org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl");
}
public static synchronized void useLog4JLogging() {
setImplementation("org.apache.ibatis.logging.log4j.Log4jImpl");
}
public static synchronized void useJdkLogging() {
setImplementation("org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl");
}
public static synchronized void useStdOutLogging() {
setImplementation("org.apache.ibatis.logging.stdout.StdOutImpl");
}
public static synchronized void useNoLogging() {
setImplementation("org.apache.ibatis.logging.nologging.NoLoggingImpl");
}
决定采用何种框架是在setImplementation函数中。如果没有抛出异常,则采用此种框架。
private static void setImplementation(String implClassName) {
try {
@SuppressWarnings("unchecked")
Class<? extends Log> implClass = (Class<? extends Log>) Resources
.classForName(implClassName); // 查找实现类
Constructor<? extends Log> candidate = implClass
.getConstructor(new Class[] { Class.class });
Log log = candidate.newInstance(new Object[] { LogFactory.class });
log.debug("Logging initialized using '" + implClassName
+ "' adapter.");
logConstructor = candidate;
} catch (Throwable t) {
throw new LogException("Error setting Log implementation. Cause: "
+ t, t);
}
}
- 大小: 30.2 KB
分享到:
相关推荐
idea插件 控制台sql idea插件 控制台sql idea插件 控制台sql
由于Mybatis Log Plugin现在已经收费了,所以我们可以下载其未收费的历史版本进行安装 如果你不清楚或者不了解 Mybatis Log Plugin 是什不妨听我解释一下:Mybatis Log Plugin是控制台 sql 打印插件 帮助我们打印sql ...
Mybatis log plugin插件,idea控制台sql日志格式化
MyBatis Log Plugin 这款插件是直接将Mybatis执行的sql脚本显示出来,把 mybatis 输出的sql日志还原成完整的sql语句 1、本地安装 2、Tools 》mybatis_log_plugin
Mybatis Log(自动填充sql参数打印到控制台)
mybatis_log_plugin_2020idea.jar
mybatis log plugin离线版本支持idea2020.1把 mybatis 输出的sql日志还原成完整的sql语句。 将日志输出的sql语句中的问号 ? 替换成真正的参数值。 通过 "Tools -> MyBatis Log Plugin" 菜单或快捷键 "Ctrl+Shift+Alt...
去idea中加在本地的jar插件就行
idea2020mybatis sql log的插件
idea更新到2020.1之后mybatis log plugin 就开始付费了,找了很久的这个jar包,有幸从一个博主那得到了mybatis log plugin这个jar包
十分宝贵的mybatis配置文件,包含最新的mybatis配置文件,以及mybatis开发文档,Log4j测试开发日志文件
mybatis,log4j打印日志到后台和文件
这里是log4j.xml详细的配置,在使用MyBatis框架时必要的一种配置。
这个插件就是把日志中运行的sql自动进行拼装,然后单独分离出来打印到sql的控制台,使的开发者很方便的查看输出sql。
maven+springmvc+mybatis+log4j框架搭建,以后项目可以多次利用起来。。节省开发时间
mybatis log plugin离线版本支持idea2020.1把 mybatis 输出的sql日志还原成完整的sql语句。 将日志输出的sql语句中的问号 ? 替换成真正的参数值。 通过 "Tools -> MyBatis Log Plugin" 菜单或快捷键 "Ctrl+Shift+Alt...
mybatis-log-plugin,下载后到idea, setting->plugins->点击设置,选择install plugin from disk进行安装 打开方式Tools->Mybatis Log Plugin 支持到idea-2020.2.2
Mybatis Log plugin安装包