常用的日志输出为Log4j,但按照常规的配置,涉及mybatis那部分日志不能打印出来的;由于没有日志的输出,开发人员很难从控制台中迅速找出相应的sql语句,对调试和找错误带来了一定的困扰,针对这个问题,我们需要额外的配置以达到日志的输出

常见的两种方法为:

在日志配置文件(log4j.properties)中增加将mybatis那部分日志级别设置为DEBUG,配置如下:

#mybatis部分
log4j.logger.com.ibatis=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
#与sql相关
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

注意:另外需要在定义LOG输出级别时,把DEBUG级别的也作为日志输出的一部分,附个人完整Log4j配置:

#定义LOG输出级别  
log4j.rootLogger=DEBUG,INFO,Console,File  
#定义日志输出目的地为控制台  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.Target=System.out  
#可以灵活地指定日志输出格式,下面一行是指定具体的格式  
log4j.appender.Console.layout = org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern = [%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m  %l%n
 
#文件大小到达指定尺寸的时候产生一个新的文件  
log4j.appender.File = org.apache.log4j.RollingFileAppender  
#指定输出目录  
log4j.appender.File.File = logs/ssm.log  
#定义文件最大大小  
log4j.appender.File.MaxFileSize = 10MB  
#输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志  
log4j.appender.File.Threshold = ALL  
log4j.appender.File.layout = org.apache.log4j.PatternLayout  
log4j.appender.File.layout.ConversionPattern = [%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m  %l%n
#mybatis日志配置 需要将日志的输出级别调为debug
log4j.logger.com.ibatis=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
#与sql相关
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

配置根Logger,log4j.rootLogger = [ level ] , appenderName
【level】是日志的级别,分别有debug -> info -> warn -> error 四种日志级别;
【appenderName】,配置日志的输出目录,同一个日志可以配置多个输出目的地;
配置log输出目的地:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

2、在Mybatis的配置文件中增加setting配置

个人在搭ssm框架中,mybatis-config.xml文件是省略的,需要后面增加,详细如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration   
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <!-- 打印查询语句 -->
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>
</configuration>

日志部分,增加name为logImpl的setting配置,value属性(即日志的打印方式)可选有:SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING,可以根据自己的需要进行配置,但个人在测试的过程中,只有值为STDOUT_LOGGING时,日志才有输出,此处存在疑问,有哪位大神能指点一下么?

注意:在增加mybatis-config.xml后,需要在spring与mybatis的整合配置文件(spring-mybatis.xml)中增加映射才可生效,如下:

<!-- spring和MyBatis整合-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <!-- 自动扫描mybatis配置文件 -->
    <property name="configLocation" value="classpath:mybatis-config.xml"></property>
    <!-- 自动扫描mapping.xml文件 -->
    <property name="mapperLocations" value="classpath:com/merch/mapping/*.xml"></property>
</bean>

输出如下:

## END 
## BEGIN  name=Tomcat 7.0.94 seq=00000034 time=2021-09-15 14:13:11
SELECT *
FROM (
	SELECT row_.*, rownum AS rn
	FROM (
		SELECT
Releasing transactional SqlSession [org.apache.ibatis.sessionb2]
Fetched SqlSession [org.apache.ibatis.session.defa03cb2] from current transaction
ooo Using Connection [oracle.jdbc.driver.T4CConnection@326c4fb9]
==>  Preparing: select * from 
==> Parameters: 0(String), 20210617(String), 20210915(String), 004(String), 004(String)
<==    Columns:
<==        Row: 7
<==        Row: 3