mybatis配置log4j不输出日志问题
来源:互联网 发布:java方法的定义和调用 编辑:程序博客网 时间:2024/05/16 04:26
原因:Mybatis默认使用slf4j输出日志,需要增加slf4j对log4j的驱动jar包。
分析
请自行看下mybatis “org.apache.ibatis.logging.LogFactory ”类源码,为了使读者更直观了解原因,笔者摘了LogFactory 部分代码。
</pre><pre name="code" class="java">public final class LogFactory { /** * Marker to be used by logging implementations that support markers */ public static final String MARKER = "MYBATIS"; private static Constructor<? extends Log> logConstructor; static { tryImplementation(new Runnable() { @Override public void run() { useSlf4jLogging(); } }); tryImplementation(new Runnable() { @Override public void run() { useCommonsLogging(); } }); tryImplementation(new Runnable() { @Override public void run() { useLog4J2Logging(); } }); tryImplementation(new Runnable() { @Override public void run() { useLog4JLogging(); } }); tryImplementation(new Runnable() { @Override public void run() { useJdkLogging(); } }); tryImplementation(new Runnable() { @Override public void run() { useNoLogging(); } }); } private LogFactory() { // disable construction } public static Log getLog(Class<?> aClass) { return getLog(aClass.getName()); } public static Log getLog(String logger) { try { return logConstructor.newInstance(new Object[] { logger }); } catch (Throwable t) { throw new LogException("Error creating logger for logger " + logger + ". Cause: " + t, t); } }......
"tryImplementation" 方法很关键
private static void tryImplementation(Runnable runnable) { if (logConstructor == null) { try { runnable.run(); } catch (Throwable t) { // ignore } } }
分析步骤:
1、初始化日志组件, “static”静态块被初始化,加载各种主流风格的日志组件,如:logging\log4j\jdkloging等。
2、在上段代码中,“logConstructor”被第一个“useSlf4jLogging”初始化,执行第二个"useCommonsLogging",logConstructor !=null,不往下走, 所以使用slf4j输出日志。(如果工程没有slf4j包,初始化会报错但不影响,异常被捕获吞掉了,会继续使用第二个默认日志输出,可以自己看代码);
调用顺序“static”->“tryImplementation"->"Runnable"->"useSlf4jLogging"->""setImplementation->"logConstructor"
调用顺序“getLog”->"logConstructor.newInstance"
protected static final Log logger = LogFactory.getLog(MyBatisBatchItemWriter.class);
4、关键点。log4j是一个日志系统。slf4j是一个日志系统的封装,对外提供统一的API,如果我们选择log4j作为我们的日志实现,需要下载slf4j-log4j12-x.x.x.jar驱动,如果没有slf4j-log4j12-x.x.x.jar就不会输出日志。
0 0
- mybatis配置log4j不输出日志问题
- Mybatis 的Log4j日志输出问题
- mybatis 配置 log4j 日志
- Mybatis log4j日志配置
- Log4J日志输出配置
- 记录学习的点滴(MyBatis log4j日志输出配置)
- mybatis 用Log4j输出日志
- springmvc整合Mybatis的Log4j日志输出问题
- Log4J mybatis 日志配置详解
- mybatis 配置log4j输出sql
- log4j 日志输出位置配置
- 日志输出之log4j配置
- SpringBoot配置log4j输出日志
- yarn 配置log4j日志输出
- log4j输出日志基本配置
- Spark配置log4j日志输出
- Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题
- Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题
- Erwin 生成 mysql 带注释(comment )的脚本
- 简单完美的解决键盘遮挡输入框的问题
- java并行编程
- hdu1010(深搜 剪枝 回溯)
- Mac OSX下安装php5.3之上的ZendOptimizer-即Guard Loader
- mybatis配置log4j不输出日志问题
- Understand for Linux安装方法
- 大数乘法
- iOS面试题三
- 用ZIP进行多文件保存
- linux下awk的关联数组
- 面试笔试杂项积累-leetcode 301-305
- Linux 下mysql常用命令--启动、停止、重启
- 不均衡学习的抽样方法