博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转】使用log4jdbc记录SQL信息
阅读量:6791 次
发布时间:2019-06-26

本文共 3291 字,大约阅读时间需要 10 分钟。

原博文出自于:  http://www.cnblogs.com/xdp-gacl/p/4081848.html      感谢!

 

 

 

一、log4jdbc的简单介绍

  使用log4jdbc在不改变原有代码的情况下,就可以收集执行的SQL文和JDBC执行情况

  平时开发使用的ibatis,hibernate,spring jdbc的sql日志信息,有一点个缺点是占位符与参数是分开打印的,如果想要拷贝sql至PLSQL Developer客户端直接执行,需要自己拼凑sql。而log4jdbc是在jdbc层的一个日志框架,可以将占位符与参数全部合并在一起显示,方便直接拷贝sql在PLSQL Developer等客户端直接执行,加快调试速度。

 

 

二、log4jdbc的使用

  下载log4jdbc的jar包log4jdbc-1.2.jar以及依赖的相关Jar包log4j-1.2.17.jar、slf4j-api-1.6.0.jar、slf4j-log4j12-1.7.7.jar,如下图所示:

  

  配置log4j的log4j.properties的配置文件,如下所示:

log4j.logger.jdbc.sqlonly=DEBUG,consolelog4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%nlog4j.logger.jdbc.sqltiming=INFO,console  log4j.logger.jdbc.connection=INFO,console

  修改dbconfig.properties配置文件的url和driverClassName

1 url:jdbc:log4jdbc:mysql://localhost:3306/xdptest 2 driverClassName:net.sf.log4jdbc.DriverSpy 3 username:root 4 password:root 5 filters:stat 6 maxActive:200 7 initialSize:20 8 maxWait:60000 9 minIdle:1010 timeBetweenEvictionRunsMillis:6000011 minEvictableIdleTimeMillis:30000012 validationQuery:SELECT 'x'13 testWhileIdle:true14 testOnBorrow:false15 testOnReturn:false16 removeAbandoned:false17 removeAbandonedTimeout:180018 logAbandoned:true

  经过这样的配置之后,就可以使用log4jdbc记录应用系统执行的SQL信息了。

  编写一个测试Servlet进行测试,代码如下:

1 /** 2  *  3  */ 4 package me.gacl.web.controller; 5  6 import java.io.IOException; 7 import java.sql.Connection; 8 import java.sql.PreparedStatement; 9 import java.sql.SQLException;10 import java.util.UUID;11 import javax.servlet.ServletException;12 import javax.servlet.http.HttpServlet;13 import javax.servlet.http.HttpServletRequest;14 import javax.servlet.http.HttpServletResponse;15 import me.gacl.util.DataSourceUtil;16 17 /**18  * 

ClassName: TestServlet

19 *

Description:

20 *

Company:广州利迪网络科技有限公司

21 * @author xudp22 * @version 1.0 V23 * @createTime 2014-11-5 下午01:49:4924 */25 public class TestServlet extends HttpServlet {26 27 public void doGet(HttpServletRequest request, HttpServletResponse response)28 throws ServletException, IOException {29 String sql = "INSERT INTO LD_USER(ID,USERNAME,USERCODE,PASSWORD) VALUES(?,?,?,?)";30 Connection connection = DataSourceUtil.getConnection();31 PreparedStatement pstmt = null;32 try {33 pstmt = connection.prepareStatement(sql);34 pstmt.setString(1, UUID.randomUUID().toString());35 pstmt.setString(2, "孤傲苍狼");36 pstmt.setString(3, "gacl");37 pstmt.setString(4, "xdp");38 int executeResult = pstmt.executeUpdate();39 } catch (SQLException e) {40 e.printStackTrace();41 }finally{42 try {43 pstmt.close();44 connection.close();45 } catch (SQLException e) {46 e.printStackTrace();47 }48 }49 }50 51 public void doPost(HttpServletRequest request, HttpServletResponse response)52 throws ServletException, IOException {53 this.doGet(request, response);54 }55 }

  访问TestServlet,执行doGet方法往数据库中插入数据,log4jdbc记录的SQL信息如下图所示:

  

  可以看到,log4jdbc记录出了SQL的执行的时间,执行时的参数以及执行耗时。这对于我们在开发中查找SQL错误是非常有帮助的。

你可能感兴趣的文章
高可用Hadoop平台-HBase集群搭建
查看>>
iOS开发之网络编程--使用NSURLConnection实现大文件下载
查看>>
linux安装AWStats业务数据分析工具
查看>>
iOS动画开发之一——UIViewAnimation动画的使用
查看>>
SpringMVC源码总结(十二)ViewResolver介绍
查看>>
数据挖掘开源项目立项
查看>>
【软考视频】只为下一个阶段更好
查看>>
Java语法基础(一)----关键字、标识符、常量、变量
查看>>
话说模式匹配(6) case类的细节
查看>>
PostgreSQL测试工具PGbench
查看>>
Akka笔记之请求与响应
查看>>
[Hadoop]序列化机制
查看>>
[华为机试练习题]39.尼科彻斯定理
查看>>
整合大量開源庫溫習基礎項目(一)
查看>>
(二十七)整型字面值(常量)——多种进制
查看>>
【SICP练习】12 练习1.18
查看>>
Error establishing a database connection 的解决方法(发现黑客入侵)
查看>>
说说我对Javascript闭包的理解
查看>>
Vuex概念浓缩版记录
查看>>
数组对象去重
查看>>