Log4jdbc数据库访问日志框架使用

log4jdbc官网地址

https://github.com/arthurblake/log4jdbc

当前最新版本是1.2, 支持JDBC3, JDBC4

Log4jdbc是在jdbc层的一个日志框架,可以将占位符与参全部合并在一起显示,方便直接拷贝sql在据库客户端运行

未使用log4jdbc记录的SQL:

select count(*) from region where id=?

使用 log4jdbc记录的SQL:

select count(*) from region where

log4jdbc特点

1.全面支持JDBC 3和JDBC 4!

2.容易配置,在大多数情况下,你需要做的是改变驱动类名net.sf.log4jdbc.DriverSpy的,并在前面加上“为jdbc:log4jdbc”到你现有的JDBC URL,建立你的日志记录类别。

示例:jdbc:log4jdbc:mysql://192.168.0.207:3306/mall

3.自动SQL输出。这大大提高了许多情况下的可读性和调试。

4.可以打印SQL的执行时间,用来调试SQL的执行效率。

5.生成SQL连接数信息,以帮助识别连接池或线程问题。

6.底层的JDBC驱动程序的兼容,使用JDK 1.4以上和SLF4J 1.x

log4jdbc设置的logger

logger                描述
jdbc.sqlonly          仅记录SQL。
jdbc.sqltiming        计时统计SQL的执行用时。
jdbc.audit            记录所有的JDBC调用(ResultSet的除外)。Log量非常大,会影响性能,建议关闭。
                      一般情况下不需要开这个设定,除非追踪一个特定的JDBC问题。
jdbc.resultset        比audit量更大,包括ResultSet对象,记录所有的JDBC记录。建议关闭
jdbc.connection        记录打开和关闭连接以及打开的连接数。用于追踪连接泄漏问题,非常有用。
 
使用方法

1: 在log4j配置文件中增加对应的logger

2:  改变驱动类名,

如MYSQL的:jdbc:log4jdbc:mysql://192.168.0.207:3306/mall

如Derby的:jdbc:log4jdbc:derby://localhost:1527//db-derby-10.2.2.0-bin/databases/MyDatabase
 
log4j配置样例
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"debug="false">
 <appender>
    <layout>
    <param value="%d %p [%c:%L] - %m%n" />
    </layout>
    <filter>
    <param value="INFO" />
    </filter>
 </appender>
 <appender>
    <param value="${log.dir}/logs/sql.log"/>
    <param value="20"/>
    <param value="20MB"/>
    <param value="true"/>
    <layout>
      <param value="%d %p [%c:%L] - %m%n"/>
    </layout>
  </appender>
  <appender>
    <param value="${log.dir}/logs/sqltiming.log"/>
    <param value="20"/>
    <param value="20MB"/>
    <param value="true"/>
    <layout>
      <param value="%d %p [%c:%L] - %m%n"/>
    </layout>
  </appender>
  <appender>
    <param value="${log.dir}/logs/jdbc.log"/>
    <param value="20"/>
    <param value="20MB"/>
    <param value="true"/>
    <layout>
      <param value="%d %p [%c:%L] - %m%n"/>
    </layout>
  </appender>
  <appender>
    <param value="${log.dir}/logs/connection.log"/>
    <param value="20"/>
    <param value="20MB"/>
    <param value="true"/>
    <layout>
      <param value="%d %p [%c:%L] - %m%n"/>
    </layout>
  </appender>
 
  <!-- log SQL (pre-execution) plus exceptions caused by SQL -->
  <logger additivity="false">
    <level value="debug"/>
    <appender-ref ref="sql-appender"/>
  </logger>
 
  <!-- log SQL with timing information, post execution -->
  <logger additivity="false">
    <level value="fatal"/>
    <appender-ref ref="sql-timing-appender"/>
  </logger>
 
  <!-- only use the two logs below to trace ALL JDBC information,
      NOTE:  This can be very voluminous!  -->
  <!-- log all jdbc calls except ResultSet calls -->
  <logger additivity="false">
    <level value="fatal"/>
    <appender-ref ref="jdbc-appender"/>
  </logger>
 
  <!-- log the jdbc ResultSet calls -->
  <logger additivity="false">
    <level value="fatal"/>
    <appender-ref ref="jdbc-appender"/>
  </logger>
 
  <!-- log connection open/close events and dump of all open connection numbers -->
  <logger additivity="false">
    <level value="fatal"/>
    <appender-ref ref="connection-appender"/>
  </logger>
 
  <!-- this log is for internal debugging of log4jdbc, itself -->
  <!-- debug logging for log4jdbc itself -->
  <logger additivity="false">
    <level value="debug"/>
    <appender-ref ref="stdout-appender"/>
  </logger>
<root>
  <level value="info" />
  <appender-ref ref="CONSOLE" />
</root>
</log4j:configuration>
 
程序调用示例

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/957753debec3b470d7692c07303fc2b7.html