zoukankan      html  css  js  c++  java
  • 转】使用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层的一个日志框架,可以将占位符与参数全部合并在一起显示,方便直接拷贝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错误是非常有帮助的。

  • 相关阅读:
    [leetcode] Weekly Contest 170 Summary
    [Scala] java使用scala的jar包问题:Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Short
    [git] Updates were rejected because the tip of your current branch is behind its remote counterpart.
    [Android] Installation failed due to: ''pm install-create -r -t -S 4590498' returns error 'UNSUPPORTED''
    CTF 常见操作总结
    记项目管理大作业Web项目Mandrian的全流程[其一] 整体分析: 功能划分, 组织结构
    [leetcode] 题解记录 11-20
    [leetcode] 题解记录 1-10
    记一次配置阿里云ECS GPU计算型gn5实例
    shell脚本 入门 —— 符号篇
  • 原文地址:https://www.cnblogs.com/zlslch/p/6038056.html
Copyright © 2011-2022 走看看