用到的jar包是:java
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.13</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.1</version> </dependency>
log4j.properties文件内容以下:sql
log4j.rootLogger=info,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] -%m%n log4j.logger.com.ibatis=debug #print package soc.dao sql log4j.logger.soc.dao=debug log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug log4j.logger.java.sql.Connection=debug log4j.logger.java.sql.Statement=debug log4j.logger.java.sql.PreparedStatement=debug,stdout
上面 最关键的一个配置是:log4j.logger.soc.dao=debug,没有这行,则不管jar包是log4j仍是slf4j都不会打印sql,不管log4j.rootLogger=info,stdout仍是log4j.rootLogger=debug,stdout,也不会打印。apache
这句配置的意思是将与mybatis mapper文件对应的dao层所在的package下的debug信息打印出来,即“log4j.logger.本身的与mapper文件对应的dao层所在的包=debug”。mybatis
log4j的日志优先级从高到低依次是:OFF FATAL ERROR WARN INFO DEBUG TRACE ALL,当设置了低级别时,该低级别及高于该级别的信息都会被打印出来。如定义级别为debug,则OFF FATAL ERROR WARN INFO信息都会打印出来。因此本例中,log4j.logger.soc.dao=trace也是能够的,这样打出的信息会更详细于debug。app
扩展:有时多人多模块开发时,会有多个project,仅在其中一个起管理做用(即main方法全部项目,启动时会加载其他的模块)的project下配置了log4j.xml,如放在一个单独的目录conf下,这时启动查询时,控制台并未打出sql语句,不是log4j.xml设置的有问题,而是未将其加入到classpath下,方法是:右键conf文件夹-->Build Path-->use as source folder。ui