使用log4jdbc记录SQL信息

一、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,console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%n
log4j.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:10
10 timeBetweenEvictionRunsMillis:60000
11 minEvictableIdleTimeMillis:300000
12 validationQuery:SELECT ‘x‘
13 testWhileIdle:true
14 testOnBorrow:false
15 testOnReturn:false
16 removeAbandoned:false
17 removeAbandonedTimeout:1800
18 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  * <p>ClassName: TestServlet<p>
19  * <p>Description: <p>
20  * <p>Company:广州利迪网络科技有限公司 <p>
21  * @author xudp
22  * @version 1.0 V
23  * @createTime 2014-11-5 下午01:49:49
24  */
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错误是非常有帮助的。

时间: 2025-01-15 14:18:25

使用log4jdbc记录SQL信息的相关文章

转】使用log4jdbc记录SQL信息

原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4081848.html 感谢! 一.log4jdbc的简单介绍 使用log4jdbc在不改变原有代码的情况下,就可以收集执行的SQL文和JDBC执行情况. 平时开发使用的ibatis,hibernate,spring jdbc的sql日志信息,有一点个缺点是占位符与参数是分开打印的,如果想要拷贝sql至PLSQL Developer客户端直接执行,需要自己拼凑sql.而log4jdbc是在jdbc层的一个日志框

RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-&gt;新增记录SQL执行过程

有时我们需要记录整个系统运行的SQL以作分析,特别是在上线前这对我们做内部测试也非常有帮助,当然记录SQL的方法有很多,也可以使用三方的组件.3.2版本我们在框架底层新增了记录框架运行的所有SQl过程保存到用户指定的地方以便分析查看,只需要在配置文件把配置项"LogSQL"设置为True即可.框架会自动记录各常用数据库如:Oracle.SqlServer.MySQL等的操作情况. 一.Web记录Sql执行情况 1.在我们的Web项目中要记录SQL可以在Web的配置文件中设置LogSql

记录SQL Server2008日志文件损坏的恢复过程

记录SQL Server2008日志文件损坏的恢复过程: 环境:系统Windows Server2003 数据库SQL Server2008 故障原因:通过mstsc链接同一服务器时,用户界面不一致.决定重启服务器,未正确关闭应用程序的情况下(程序在访问数据库),导致数据库日志文件损坏,自然也就无法访问mdf文件!(都是微软自家的产品,重启服务器为什么不能检查数据库的状态,将数据库设置在安全状态后在重启呢??所以,要养成良好的习惯.关闭现有数据库链接,再重启服务器) 故障表现:无法访问数据文件,

使用hibernate更新数据库记录的信息的相关学习记录

截选代码(可能遗漏标点符号): package name.sql; import java.util.List; import name.session.HibernateSessionFactory; import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction; public class SqlHelper { //增 public void save(Object obj){

如何在MySql中记录SQL日志

SQL server有一个sql profiler可以实时跟踪服务器执行的SQL语句,这在很多时候调试错误非常有用.例如:别人写的复杂代码.生产系统.无调试环境.无原代码... ... 查了一下资料,My SQL可以用下面方法跟踪sql 语句,以下方法以Windows平台为例,linux雷同: 1  配置my.ini文件(在安装目录,linux下文件名为my.cnf 查找到[mysqld]区段,增加日志的配置,如下示例: [mysqld]log="C:/temp/mysql.log"l

(4.7)怎么捕获和记录SQL Server中发生的死锁?

转自:https://blog.csdn.net/c_enhui/article/details/19498327 怎么捕获和记录SQL Server中发生的死锁? sql server如何让错误日志记录死锁 2014年02月19日 18:25:55 阅读数:1313 我们知道,可以使用SQL Server自带的Profiler工具来跟踪死锁信息.但这种方式有一个很大的敝端,就是消耗很大.据国外某大神测试,profiler甚至可以占到服务器总带宽的35%,所以,在一个繁忙的系统中,使用profi

记录客户信息你还在用传统的笔记本吗?

对于销售员来说,对客户的信息记录十分重要,一般情况下,销售员都是使用传统的小本子记录的方式.这种记录客户的信息不但效率低下,而且还会出现信息错漏的情况,大大的阻碍了客户维系的工作进行.在线crm客户关系管理系统,在记录客户信息这方面有着重要的意义,不但能够高效.准确录入客户的信息,而且还能够让销售员随时随地记录客户的信息. 传统的记录方式往往会导致客户的资料有各种错漏,不但耗费销售员的时间,而且还有可能给企业带来客户流失的风险.但是使用在线crm可以有效解决这些问题,销售员在见客户的过程中使用在

sql语句查询同一表内多字段同时重复的记录 sql数据库重复记录删除

分享下用sql语句删除数据库中重复记录的方法.比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完全相同的记录查询出来select p1.* from persons p1,persons p2 where p1.id<>p2.id and p1.cardid = p2.cardid and p1.pname = p2.pname and p1.address = p2.address可以实现上述效果.几个删除重复记录的SQL语句 1.用rowid方法2.用gr

asp.net记录错误信息的一般处理方法

在本文中,我们将通过一个简单的处理来记录在我们的网站中的错误和异常.我们这样操作,每当遇到程序错误时,将使用者导航到一个单独的页面,同时错误将被记录到服务器上的一个文本文件,每当错误发生时,我们将以日志的形式每天记录. 首先,我先写一个静态方法用于将错误信息记录到文本文件,这里是将错误信息记录到服务器上的Error文件夹下,代码如下: using System.Globalization; /// <summary> /// 用于将错误信息输出到txt文件 /// </summary&g