常用的日志输出为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