使用Log4jdbc-log4j2监听MyBatis中运行的SQL和Connection

标签: log4jdbc log4j2 监听 | 发表时间:2014-05-21 22:45 | 作者:blueheart20
出处:http://blog.csdn.net

引言: 在项目中使用了MyBatis,一个比较苦恼的问题是无法看到执行的SQL的具体情况,所以,就找到了Log4jdbc-log4j2。这个是一个基于jdbc层面的监听工具,可以监听对于数据库的主要操作,从而完美的查看到其中执行的操作。


1. Log4jdbc-log4j2版本选择

2.  如何引入到项目?

     如果项目是基于Maven工具,则可以直接使用如下依赖,即可完美解决问题:

<dependency>
  <groupId>org.bgee.log4jdbc-log4j2</groupId>
  <artifactId>log4jdbc-log4j2-jdbcXX</artifactId>
  <version>1.16</version>
</dependency>
3.  依赖包的安装

    a.  如有使用log4j, 则需要log4j.-core.jar和log4j-api.jar

    b.  如使用slf4j,则需要  slf4j-api.jar

4.  修改数据库连接中的jdbc.url和driver.Class

xxx.driverClass=<strong>net.sf.log4jdbc.sql.jdbcapi.DriverSpy</strong>   ------ 数据库驱动程序
............................
xxxx.jdbcUrl = <strong>jdbc:log4</strong>\:oracle\:thin\:@192.168.1.20\:1521\:orcl    -------------- 数据库连接URL
  说明:其中加粗的内容,表示其是被修改后的新内容。

  原有的URL:

jdbc:derby://localhost:1527//db-derby-10.2.2.0-bin/databases/MyDatabase

  替换的URL:

  jdbc:log4jdbc:derby://localhost:1527//db-derby-10.2.2.0-bin/databases/MyDatabase

5.  配置好log4j和log4j.properties

6.  新增log4jdbc.log4j2.properties

   这里使用Slf4j API, 声明如下:

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
7.  可用的Logger

   

logger description
jdbc.sqlonly Logs only SQL. SQL executed within a prepared statement is automatically shown with it's bind arguments replaced with the data bound at that position, for greatly increased readability.
jdbc.sqltiming Logs the SQL, post-execution, including timing statistics on how long the SQL took to execute.
jdbc.audit Logs ALL JDBC calls except for ResultSets. This is a very voluminous output, and is not normally needed unless tracking down a specific JDBC problem.
jdbc.resultset Even more voluminous, because all calls to ResultSet objects are logged.
jdbc.resultsettable Log the jdbc results as a table. Level debug will fill in unread values in the result set.
jdbc.connection Logs connection open and close events as well as dumping all open connection numbers. This is very useful for hunting down connection leak problems.

这些都是需要配置到log4j.properties或者log4j.xml中去的。

示例如下:

   

! Log all JDBC calls except for ResultSet calls
log4j.logger.jdbc.audit=DEBUG,jdbc
log4j.additivity.jdbc.audit=false

! Log only JDBC calls to ResultSet objects
log4j.logger.jdbc.resultset=DEBUG,jdbc
log4j.additivity.jdbc.resultset=false

! Log only the SQL that is executed.
log4j.logger.jdbc.sqlonly=DEBUG,sql
log4j.additivity.jdbc.sqlonly=false

! Log timing information about the SQL that is executed.
log4j.logger.jdbc.sqltiming=DEBUG,sqltiming
log4j.additivity.jdbc.sqltiming=false

! Log connection open/close events and connection number dump
log4j.logger.jdbc.connection=FATAL,connection
log4j.additivity.jdbc.connection=false


! the appender used for the JDBC API layer call logging above, sql only
log4j.appender.sql=org.apache.log4j.FileAppender
log4j.appender.sql.File=./logs/sql.log
log4j.appender.sql.Append=false
log4j.appender.sql.layout=org.apache.log4j.PatternLayout
log4j.appender.sql.layout.ConversionPattern=-----> %d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%n

! the appender used for the JDBC API layer call logging above, sql timing
log4j.appender.sqltiming=org.apache.log4j.FileAppender
log4j.appender.sqltiming.File=./logs/sqltiming.log
log4j.appender.sqltiming.Append=false
log4j.appender.sqltiming.layout=org.apache.log4j.PatternLayout
log4j.appender.sqltiming.layout.ConversionPattern=-----> %d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%n

! the appender used for the JDBC API layer call logging above
log4j.appender.jdbc=org.apache.log4j.FileAppender
log4j.appender.jdbc.File=./logs/jdbc.log
log4j.appender.jdbc.Append=false
log4j.appender.jdbc.layout=org.apache.log4j.PatternLayout
log4j.appender.jdbc.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n

! the appender used for the JDBC Connection open and close events
log4j.appender.connection=org.apache.log4j.FileAppender
log4j.appender.connection.File=./logs/connection.log
log4j.appender.connection.Append=false
log4j.appender.connection.layout=org.apache.log4j.PatternLayout
log4j.appender.connection.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n

总结:

   经过一番折腾之后呢,终于可以在系统看到数据库中各类的操作了,数据库的各种行为尽在眼底........


作者:blueheart20 发表于2014-5-21 14:45:27 原文链接
阅读:55 评论:0 查看评论

相关 [log4jdbc log4j2 监听] 推荐:

使用Log4jdbc-log4j2监听MyBatis中运行的SQL和Connection

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

清官教你使用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.

监听短信

- - CSDN博客推荐文章
在监听短信在这个功能中,通知观察者的工作已经有别人做好,我们只需要注册一个观察者即可. System.out.println( new Date(date)+" 您收到 " + address +"给你发的一封短信,短信内容为: \n" +body );. 最后千万别忘了在清单文件上加上所需要的相应权限.

监听文本框输入

- - 博客园_Ruby's Louvre
Firefox、Chrome、IE9,IE10 均支持 oninput 事件,此外所有版本的 IE 均支持 onpropertychange 事件. oninput 事件在用户输入、退格(backspace)、删除(delete)、剪切(ctrl + x)、粘贴(ctrl + v)及鼠标剪切与粘贴时触发(在 IE9 中只在输入、粘贴、鼠标粘贴时触发).

ACTIVITI 学习笔记 - 监听

- - 企业架构 - ITeye博客
ACTIVITI 学习笔记 - 监听. 所有分发的事件都是org.activiti.engine.delegate.event.ActivitiEvent的子类. 监听器监听的流程引擎已经创建完毕,并准备好接受API调用. 监听器监听的流程引擎已经关闭,不再接受API调用. 创建了一个新实体,初始化也完成了.

智能电视变成监听工具

- - Solidot
NCC Groupp的安全专家演示了如何将智能电视变成监听工具. 智能电视内置了扬声器和存储器,可以被恶意程序利用记录会话. 间谍程序可通过物理接触或恶意应用下载安装到电视机上. NCC Group是通过物理接触方式安装间谍软件,该公司的安全专家认为恶意应用可伪装成合法应用通过设备制造商的应用商店安装到电视机上,智能电视支持自动更新,因此恶意应用可释出恶意更新将合法应用变成间谍软件.

简析几种常用的Web监听

- - CSDN博客Web前端推荐文章
我们通常可以部署一些特殊的Servlet类来监听Web应用的上下文信息、Servlet会话信息,Servlet请求信息等. 通过这些监听,我们可以自动执行某些程序. 例如,我们可以把利用监听会话信息,来统计在线人数. 我们可以监听ServletContext,来初始化一些系统常量,初始化一些工厂等.

手机是否可以被监听?

- - 知乎每日精选
手机监听的部分内容可以见我在 电影《窃听风云》中情报人员通过对方的手机(前提不拆下电池)进行监听是否真实. 不开启加密选项网络的GSM和CDMA手机可以轻易被监听,前者技术门槛更低. 由于手机发射功率远比基站小,因此靠被动式设备(即纯接收手机发射的无线电波)获取到的语音绝大多数为单向语音. 而双向语音的价值远远大于单向语音,因此找出手机位置,接近目标拿到双向语音,才是一个完整的监听过程.

Fragment或WebView里监听返回键

- - 移动开发 - ITeye博客
思路主要是在onResume事件里处理按钮事件并进行判断. 如果使用了WebView则在onKey里处理返回按钮事件. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

Android 监听锁屏/开屏事件

- - CSDN博客推荐文章
(1) 监听BroadcastReceiver. (2)获取PowerManager事件. Intent.ACTION_SCREEN_ON : 屏幕点亮 Intent.ACTION_SCREEN_OFF :屏幕关闭 Intent.ACTION_USER_PRESENT: 用户解锁. 监听用户解锁需要在AndroidManifest中注册权限.