在《使用IntelliJ IDEA开发SpringMVC网站(四)集成MyBatis》文章中讲解了使用Log4j来输出MyBatis执行的SQL语句,如下所示:
这里有一个缺点:占位符与参数是分开打印的,如果想要拷贝sql至客户端直接执行,需要自己拼凑sql。而log4jdbc是在jdbc层的一个日志框架,可以将占位符与参数全部合并在一起显示,方便直接拷贝sql在客户端直接执行,加快调试速度。
log4jdbc-remix 是 log4jdbc的一个扩展,安装配置过程如下:
1.加入依赖的Jar包
在pom.xml文件中增加如下内容:1
2
3
4
5
6
7
8
9
10
11
12
13<properties>
...
<log4jdbc_remix.version>0.2.7</log4jdbc_remix.version>
</properties>
<dependencies>
...
<!-- log4jdbc-remix -->
<dependency>
<groupId>org.lazyluke</groupId>
<artifactId>log4jdbc-remix</artifactId>
<version>${log4jdbc_remix.version}</version>
</dependency>
</dependencies>
2.Spring中配置
修改spring-mybatis.xml文件,配置如下所示:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22<!--数据库连接池-->
<bean id="dataSourceSpied" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize"><value>1</value></property>
<property name="maxActive"><value>20</value></property>
<property name="minIdle"><value>1</value></property>
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait"><value>60000</value></property>
<!-- 配置监控统计拦截的filters -->
<property name="filters"><value>stat</value></property>
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis"><value>60000</value></property>
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis"><value>300000</value></property>
</bean>
<bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
<constructor-arg ref="dataSourceSpied" />
</bean>
也可以格式化一下输出如下所示:
1 | <bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource"> |
3.log4j.properties配置
在log4j.properties文件里面增加如下内容:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23##-------------log4jdbc 配置方式示例---------------##
#值设置方式 :如果关闭设置为OFF,如果开启设置为ON(默认debug级别)或(设置输出级别,输出器)
log4j.logger.jdbc.sqlonly=OFF
log4j.logger.jdbc.sqltiming=INFO,sql
log4j.logger.jdbc.audit=OFF
log4j.logger.jdbc.resultset=OFF
log4j.logger.jdbc.connection=OFF
log4j.logger.jdbc.resultsettable=INFO,sql
log4j.additivity.jdbc.sqlonly=false
log4j.additivity.jdbc.sqltiming=false
log4j.additivity.jdbc.audidt=false
log4j.additivity.jdbc.resultset=false
log4j.additivity.jdbc.connection=false
log4j.additivity.jdbc.resultsettable=false
! the appender used for the JDBC API layer call logging above, sql only
log4j.appender.sql=org.apache.log4j.FileAppender
log4j.appender.sql.File=D:/logs/sql.log
log4j.appender.sql.Append=false
log4j.appender.sql.layout=org.apache.log4j.PatternLayout
log4j.appender.sql.layout.ConversionPattern= %d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%n
log4j.additivity.sql=false
配置完成,启动服务,出现了以下异常:
解决方案:注释掉