log4jdbc记录完整的SQL信息

2020-06-15 17:06:42 浏览数 (1)

0x01:log4jdbc的简单介绍

  使用log4jdbc在不改变原有代码的情况下,就可以日志文件中输出的SQL语句和JDBC执行耗时情况。

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

0x02: 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

在日志配置文件中定义相关logger对象的输出级别和输出器

在log4jdbc中定义了以下五个日志对象:

  • jdbc.sqlonly : 记录系统执行过的sql语句
  • jdbc.sqltiming : 记录sql执行的时间,可以分析耗时的sql语句
  • jdbc.audit : 记录除了ResultSet外的所有JDBC调用情况。一般不需要
  • jdbc.resultset : 记录返回结果集信息
  • jdbc.connection: 记录数据库连接和释放信息,可记录当前的数据库连接数,便于诊断连接是否释放

0x03: 配置log4j的log4j.properties的配置文件

代码语言:javascript复制
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

0x04: 修改jdbc.properties配置文件的url和driverClassName

代码语言:javascript复制
jdbc.url=jdbc:log4jdbc:mysql://localhost:3306/xdptest
jdbc.driverClassName=net.sf.log4jdbc.DriverSpy
jdbc.username=root
jdbc.password=root
jdbc.filters=stat
jdbc.maxActive=200
jdbc.initialSize=20
jdbc.maxWait=60000
jdbc.minIdle=10
jdbc.timeBetweenEvictionRunsMillis=60000
jdbc.minEvictableIdleTimeMillis=300000
jdbc.validationQuery=SELECT 'x'
jdbc.testWhileIdle=true
jdbc.testOnBorrow=false
jdbc.testOnReturn=false
jdbc.removeAbandoned=false
jdbc.removeAbandonedTimeout=1800
jdbc.logAbandoned=true

主要是

  • com.mysql.jdbc.Driver 换成 net.sf.log4jdbc.DriverSpy
  • jdbc:mysql:// 换成 jdbc:log4jdbc:mysql://

0 人点赞