`
codecook
  • 浏览: 41974 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

mybatis输出日志

阅读更多
想设置mybatis输出sql语句来调试,但又懒得看它的源码来获得如何输出sql日志,于是网上搜,试啊试,没一个靠谱的。。。只能看源码了。。。
因为mybatis是一个开源的框架,因此的它的日志不能硬编码成log4j之类的具体日志框架,鬼知道你到底用不用log4j,所以mybatis默认用的日志门面框架slf4j,具体用什么日志由客户方自己决定。
package org.apache.ibatis.logging;
public class LogFactory {
  private static Constructor<? extends Log> logConstructor;

  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();
      }
    });
  }
...
}



我用的是log4j,因此我需要slf4j-api、slf4j-log4j、log4j这3个日志jar包。slf4j-log4j就是告诉slf4j我用的是log4j。

mybatis跟sql相关的日志类如下:
org.apache.ibatis.logging.jdbc.ConnectionLogger
org.apache.ibatis.logging.jdbc.PreparedStatementLogger
org.apache.ibatis.logging.jdbc.ResultSetLogger
org.apache.ibatis.logging.jdbc.StatementLogger

看这4个类的名字就能知道对应的是哪些sql日志,这4个类里都有这结构:
        if (log.isDebugEnabled()) {
          log.debug("xxxxxxxxx");
        }

因此,只有把日志级别改为debug才能输出日志。贴一下我的配置:
<appender name="sqlappender" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="file" value="/home/logs/sql.log" />
		<param name="append" value="true" />
		<param name="encoding" value="UTF-8" />
		<param name="threshold" value="DEBUG" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %m%n" />
		</layout>
	</appender>
	
	<logger name="java.sql.Connection">
		<level value="debug" />
		<appender-ref ref="sqlappender" />
	</logger>
	
	<logger name="java.sql.Statement">
		<level value="debug" />
		<appender-ref ref="sqlappender" />
	</logger>
	
	<logger name="java.sql.CallableStatement">
		<level value="debug" />
		<appender-ref ref="sqlappender" />
	</logger>
	
	<logger name="java.sql.PreparedStatement">
		<level value="debug" />
		<appender-ref ref="sqlappender" />
	</logger>

这样日志就能输出了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics