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

标签: java | 发表时间:2015-10-13 10:03 | 作者:一名清官
出处:http://www.javaranger.com

一、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

相关 [清官 log4jdbc 记录] 推荐:

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

- - JavaRanger - 专注JAVA高性能程序开发、JVM、Mysql优化、算法
一、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-log4j2监听MyBatis中运行的SQL和Connection

- - CSDN博客数据库推荐文章
引言: 在项目中使用了MyBatis,一个比较苦恼的问题是无法看到执行的SQL的具体情况,所以,就找到了Log4jdbc-log4j2. 这个是一个基于jdbc层面的监听工具,可以监听对于数据库的主要操作,从而完美的查看到其中执行的操作. Log4jdbc-log4j2版本选择.      如果项目是基于Maven工具,则可以直接使用如下依赖,即可完美解决问题:.

hadoop记录

- - 开源软件 - ITeye博客
MapReduce的特征 1. Map1结果与Map2结果重叠现象. (传统的分布式计算无法解决) 方案:Map2与Map2原封不动的把数据传到Reduce; 问题:结果Map啥事没干,Reduce最终累死, 分而治之成为了空谈. reduce任务工作过程: reduce是将map的输出作为reduce的输入,只要有一个map任务执行完就会有reduce任务开始执行.

A5版聊记录

- 章明 - SEM 一家之言
这是上周接受A5版聊的记录,感谢光年论坛网友 cx69 的整理. 由于很多人不逛论坛的,所以发到这个博客上. 我觉得这个访谈的内容对大家有帮助. 问:嘉宾你好,嘉宾的是科学的SEOer,首先问,什么样的SEO才是科学的?平时站长用的SEO方法都是不科学的吗?科学是相对什么而言的?. 嘉宾说,提出“科学的SEO”的说法,就是要来抵抗那种“猜谜语式的SEO”.

杭州归来 – interACT记录

- Millie - Plidezus&#39;sky
纪念拍了卖2.0在AppStore中得到推荐~ 没下的同学点此下载咯~. 和同事一起参加了淘宝技术嘉年华,其中interACT中百度MUX的同学分享都是干货,很是受用. 碎碎的记录了一些觉得重要的地方,在此整理下. 虽然举的是杭州出租车的例子,但是每个产品也是如此,用户能记住的都是那些让他们极度不爽的地方.

Sony LT26i 刷机记录

- - 依云's Blog
声明:本文以期有用的目的写作,不保证本文所述操作能够部分或者完全地满足他人的需求,也不保证其不会给他人造成损失. 按本文操作者,如对其生命财产造成任何损失请自理,在法律许可的范围内本人不承担责任. 注意:除 SD 卡数据外,其它数据均可能永久性丢失. 首先,开启手机的 USB 调试模式. Sony Xperia S 版 ROM,将其放到 SD 卡根目录: adb push cm-9.1.0-nozomi.zip /mnt/sdcard.

mysql记录耗时的sql

- - 数据库 - ITeye博客
mysql记录耗时的sql. mysql可以把耗时的sql或未使用索引的sql都记录在slow log里,供优化分析使用. 1.mysql慢查询日志启用:. mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里有很耗费资源的sql语句,那如何打开mysql的慢查询日志记录呢. 这说明slow log功能没有启用,要启用需要修改mysql的配置文件,在配置文件"[mysqld]"里添加如下俩参数:.

Kettle运行日志记录

- - 开源软件 - ITeye博客
原创文章,转载请注明出处:http://qq85609655.iteye.com/blog/2173882. 在kettle.properties中,可以定义参数. 来全局设置,记录kettle的job和trans日志,. 记录日志,会进行锁表,在kettle作业非常多的情况下,容易造成表锁,以及队列等待job日志记录的情况严重影响效率.

springboot aop日志记录

- - 编程语言 - ITeye博客
一、POM增加AOP JAR包. 三、SysAspect类. 注:@annotation(cn.com.hfai.controller.system.Logweb) 一定要指定Logweb类. 四、在Controller类的方法之上加上注解 @Logweb 即可. 注:这个只是打印在控制台上,若想放到数据库中,则需要增加操作数据库的业务代码.

记录用户体验细节

- 競 - rank&#39;s technical notes
突然有个想法,想把原来我发现的,看到的,听到的一些好的用户体验列出来,这些经验对于做终端的开发,都是值得我们学习的. 现在能想到的几条,以后想起来慢慢加上来. windows虽然IE做得不怎么样,但你可知道触发拖动事件不是mousedown开始就叫拖拽(DragDrop),而是有两个条件,一个是mousedown后1秒,或者鼠标移动3px后再开始触发拖动的么.