转载

清官教你使用log4jdbc记录SQL信息

一、log4jdbc介绍

使用log4jdbc在不改变原有代码的情况下,就可以收集执行的SQL文和JDBC执行情况。本文使用logback方式实现,如果需要使用log4j的来实现,请参照博文: http://www.cnblogs.com/xdp-gacl/p/4081848.html

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

输出结果显示如下:

INFO jdbc.sqltiming - select count(*) as col_0_0_ from shops shop0_ where shop0_.name like '%f%'  {executed in 0 msec}  

测试代码地址:代码: https://github.com/lockbur/spring-data-jpa-log4jdbc-demo.git

二、log4jdbc的使用

(1) log4jdbc不要以为只能是log4j能使用,logback也同样是适用的。但是我的经验告诉我,最好还是使用slf4j来统一管理你的日志框架。

(2) 下载log4jdbc的jar包log4jdbc-1.2.jar以及依赖的相关Jar包logback-classic-1.1.2.jar、slf4j-api-1.7.7.jar,下面maven依赖包:

<!-- slf4j --> <dependency>  <groupId>org.slf4j</groupId>  <artifactId>slf4j-api</artifactId>  <version>1.7.7</version> </dependency> <!-- logback --> <dependency>  <groupId>ch.qos.logback</groupId>  <artifactId>logback-classic</artifactId>  <version>1.1.2</version> </dependency> <!-- log4jdbc --> <dependency>  <groupId>com.googlecode.log4jdbc</groupId>  <artifactId>log4jdbc</artifactId>  <version>1.2</version>  <scope>runtime</scope> </dependency>

(3) 修改logback.xml文件配置如下

<?xml version="1.0" encoding="UTF-8"?> <configuration>  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">   <encoder>    <pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>   </encoder>  </appender>   <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">   <file>/tmp/logs/spr-data-jdbc.log</file>   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">    <fileNamePattern>/tmp/logs/spr-data.%d{yyyy-MM-dd}.log</fileNamePattern>   </rollingPolicy>   <encoder>    <pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>   </encoder>  </appender>   <!-- project default level -->  <logger name="com.spr" level="INFO" />   <!--log4jdbc -->  <logger name="jdbc.sqltiming" level="INFO"/>   <root level="WARN">   <appender-ref ref="console" />   <appender-ref ref="rollingFile" />  </root> </configuration>

(4) 修改链接数据库的驱动为net.sf.log4jdbc.DriverSpy和url的前缀jdbc:log4jdbc:mysql://localhost:3306/test,不要使用mysql-connector下自己的驱动。

db.driver=net.sf.log4jdbc.DriverSpy     db.url=jdbc:log4jdbc:mysql://localhost:3306/test     db.username=root     db.password=Passw0rd

三、总结

经过上面这样的配置之后,就可以使用log4jdbc记录应用系统执行的SQL信息了。主要方便调试使用 生产环境请更换驱动并且注释掉该功能,

测试结果如下:

信息: Server startup in 16625 ms INFO com.spr.controller.ShopController - list shopListPage INFO jdbc.sqltiming - select count(*) as col_0_0_ from shops shop0_ where shop0_.name like '%f%'   {executed in 1 msec} INFO jdbc.sqltiming - select shop0_.id as id1_0_, shop0_.employees_number as employee2_0_, shop0_.name as name3_0_,  shop0_.status as status4_0_ from shops shop0_ where shop0_.name like '%f%' limit 25  {executed in 1 msec}

代码: https://github.com/lockbur/spring-data-jpa-log4jdbc-demo.git

正文到此结束
Loading...