使用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.

logback VS log4j2 那些你注意不到的性能差距...

- - 掘金 后端
logback, log4j2 等都是非常优秀的日志框架, 在日常使用中,我们很少会关注去使用哪一个框架, 但其实这些日志框架在性能方面存在明显的差异. 尤其在生产环境中, 有时候日志的性能高低,很可能影响到机器的成本, 像一些大企业,如阿里、腾讯、字节等,一点点的性能优化,就能节省数百万的支出. 再次, 统一日志框架也是大厂常有的规范化的事情, 还可以便于后续的ETL流程, 因此,我们选一个日志框架,其实还是比较重要的.

Log4j2史诗级漏洞来袭,影响Spring Boot应用,请自查!

- - 程序猿DD
Apache Log4j 2是一款优秀的Java日志框架. 该工具重写了Log4j框架,并且引入了大量丰富的特性. 该日志框架被大量用于业务系统开发,用来记录日志信息. 由于Apache Log4j 2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞. 漏洞利用无需特殊配置,攻击者可直接构造恶意请求,触发远程代码执行漏洞.

你还在用 Logback?Log4j2 的异步性能已经无敌了,还不快试试

- - SegmentFault 最新的文章
Logback 算是 JAVA 里一个老牌的日志框架,从 06 年开始第一个版本,迭代至今也十几年了. 不过 logback 最近一个稳定版本还停留在 2017 年,好几年都没有更新;logback 的兄弟 slf4j 最近一个稳定版也是 2017 年,有点凉凉的意思. 而且 logback 的异步性能实在拉跨,功能简陋,配置又繁琐,远不及 Apache 的新一代日志框架 -.

Apache Log4j2 远程代码执行漏洞处置手册 – 绿盟科技技术博客

- -
12月9日,绿盟科技CERT监测到网上披露Apache Log4j2 远程代码执行漏洞,由于Apache Log4j2某些功能存在递归解析功能,未经身份验证的攻击者通过发送特别构造的数据请求包,可在目标服务器上执行任意代码. 漏洞PoC已在网上公开,默认配置即可进行利用,该漏洞影响范围极广,建议相关用户尽快采取措施进行排查与防护.

监听短信

- - 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调用. 创建了一个新实体,初始化也完成了.

Spring事件监听原理

- - 掘金 后端
基于 SpringBoot-3.1.2. Spring 事件机制主要用于业务编码的解耦,例如用户订单办理成功,需要发送短信通知,这是两个不同的业务逻辑,不应该耦合在一起,针对于此,就可以通过事件机制来解决,以下是一个最简单的Spring事件使用示例. 准备事件监听器(也就是发布事件后,对应的处理者).