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

log4jdbc官网地址

http://code.google.com/p/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 id='gz'

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 name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
    <param name="conversionPattern" value="%d %p [%c:%L] - %m%n" />
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
	<param name="LevelMin" value="INFO" />
    </filter>
 </appender> 
 <appender name="sql-appender" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="${log.dir}/logs/sql.log"/>
    <param name="MaxBackupIndex" value="20"/>
    <param name="MaxFileSize" value="20MB"/>
    <param name="Append" value="true"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %p [%c:%L] - %m%n"/>
    </layout>
  </appender>
  <appender name="sql-timing-appender" class="org.apache.log4j.FileAppender">
    <param name="File" value="${log.dir}/logs/sqltiming.log"/>
    <param name="MaxBackupIndex" value="20"/>
    <param name="MaxFileSize" value="20MB"/>
    <param name="Append" value="true"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %p [%c:%L] - %m%n"/>
    </layout>
  </appender>
  <appender name="jdbc-appender" class="org.apache.log4j.FileAppender">
    <param name="File" value="${log.dir}/logs/jdbc.log"/>
    <param name="MaxBackupIndex" value="20"/>
    <param name="MaxFileSize" value="20MB"/>
    <param name="Append" value="true"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %p [%c:%L] - %m%n"/>
    </layout>
  </appender>
  <appender name="jdbc-connection" class="org.apache.log4j.FileAppender">
    <param name="File" value="${log.dir}/logs/connection.log"/>
    <param name="MaxBackupIndex" value="20"/>
    <param name="MaxFileSize" value="20MB"/>
    <param name="Append" value="true"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %p [%c:%L] - %m%n"/>
    </layout>
  </appender>

  <!-- log SQL (pre-execution) plus exceptions caused by SQL -->
  <logger name="jdbc.sqlonly" additivity="false">
    <level value="debug"/>
    <appender-ref ref="sql-appender"/>
  </logger>

  <!-- log SQL with timing information, post execution -->
  <logger name="jdbc.sqltiming" 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 name="jdbc.audit" additivity="false">
    <level value="fatal"/>
    <appender-ref ref="jdbc-appender"/>
  </logger>

  <!-- log the jdbc ResultSet calls -->
  <logger name="jdbc.resultset" additivity="false">
    <level value="fatal"/>
    <appender-ref ref="jdbc-appender"/>
  </logger>
 
  <!-- log connection open/close events and dump of all open connection numbers -->
  <logger name="jdbc.connection" 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 name="log4jdbc.debug" additivity="false">
    <level value="debug"/>
    <appender-ref ref="stdout-appender"/>
  </logger>
<root>
  <level value="info" />
  <appender-ref ref="CONSOLE" />
</root>
</log4j:configuration>

程序调用示例

public class Demo {
    private static Logger log = LoggerFactory.getLogger(Demo.class);

    public static void main(String[] args) throws SQLException {
        log.info("开始");
        Connection conn = DBUtils.getConnection();
        conn.createStatement().execute("select count(*) from xbm_region");
        JdbcUtils.executeQuery("select count(*) from xbm_region where id=?", "xxx");
        log.info("完成");
    }
}
时间: 2024-09-12 09:42:23

log4jdbc数据库访问日志框架使用的相关文章

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 wher

[转载]java日志框架log4j详细配置及与slf4j联合使用教程

一.log4j基本用法 首先,配置log4j的jar,maven工程配置以下依赖,非maven工程从maven仓库下载jar添加到"build path" 1 2 3 4 5 <dependency>     <groupId>log4j</groupId>     <artifactId>log4j</artifactId>     <version>1.2.17</version> </dep

CI配置多数据库访问的方法_php实例

本文实例讲述了CI配置多数据库访问的方法.分享给大家供大家参考,具体如下: 1.修改datebase.php文件,将: $db['XXX']['pconnect'] = TRUE; 修改成: $db['XXX']['pconnect'] = FALSE; 2.将原来的数据库链接定义复制一份,如当前 $db['bbs']['hostname'] = '你的数据库IP地址'; $db['bbs']['username'] = '链接用户名'; $db['bbs']['password'] = '数据

携程开源数据库访问框架 Ctrip DAL

随着企业规模扩张和业务量的急剧增加,作为系统核心的数据库相关开发也会经历一个由单一团队发展为多团队:由单机扩张到集群:由单数据库发展为多数据库:由采用单一数据库产品到多种数据库产品并存的过程. 伴随这一过程的是如何管理数据库扩展,如何规范数据库访问,如何保护数据库投资,如何应对访问量增加,如何预防安全问题等一系列挑战. 作为国内在线旅游行业的翘楚,携程也曾经面对同样困扰.为了应对这些挑战,实现企业10倍速发展,携程开发了具有自己特色的数据库访问框架Ctrip DAL. Ctrip DAL支持流行

携程开源数据库访问框架Ctrip DAL

随着企业规模扩张和业务量的急剧增加,作为系统核心的数据库相关开发也会经历一个由单一团队发展为多团队;由单机扩张到集群;由单数据库发展为多数据库;由采用单一数据库产品到多种数据库产品并存的过程.伴随这一过程的是如何管理数据库扩展,如何规范数据库访问,如何保护数据库投资,如何应对访问量增加,如何预防安全问题等一系列挑战.作为国内在线旅游行业的翘楚,携程也曾经面对同样困扰.为了应对这些挑战,实现企业10倍速发展,携程开发了具有自己特色的数据库访问框架Ctrip DAL.Ctrip DAL支持流行的分库

logback: 通用、可靠、快速灵活的日志框架--配置样例

一.简介:       logback是一个可靠.通用.快速而又灵活的Java日志框架. 声称要取代log4j.Logback is intended as a successor to the popular log4j projec       logback当前分成三个模块:logback-core,logback- classic和logback-access.       logback-core是其它两个模块的基础模块.logback-classic是log4j的一个改良版本.  

数据库访问性能优化_MsSql

在网上有很多文章介绍数据库优化知识,但是大部份文章只是对某个一个方面进行说明,而对于我们程序员来说这种介绍并不能很好的掌握优化知识,因为很多介绍只是对一些特定的场景优化的,所以反而有时会产生误导或让程序员感觉不明白其中的奥妙而对数据库优化感觉很神秘. 很多程序员总是问如何学习数据库优化,有没有好的教材之类的问题.在书店也看到了许多数据库优化的专业书籍,但是感觉更多是面向DBA或者是PL/SQL开发方面的知识,个人感觉不太适合普通程序员.而要想做到数据库优化的高手,不是花几周,几个月就能达到的,这

解读ASP.NET 5 &amp; MVC6系列(9):日志框架

原文:解读ASP.NET 5 & MVC6系列(9):日志框架 框架介绍 在之前的.NET中,微软还没有提供过像样的日志框架,目前能用的一些框架比如Log4Net.NLog.CommonLogging使用起来多多少少都有些费劲,和java的SLF4J根本无法相比.但在新版的ASP.NET5中,可谓是牛气冲天,微软提供的Microsoft.Framework.Logging框架集可谓就是.NET版的SLF4J,提供相应的接口,其它第三方组件可以根据接口实现自己的实现. ILoggerFactory

解读ASP.NET 5 &amp; MVC6系列教程(9):日志框架_自学过程

框架介绍 在之前的.NET中,微软还没有提供过像样的日志框架,目前能用的一些框架比如Log4Net.NLog.CommonLogging使用起来多多少少都有些费劲,和java的SLF4J根本无法相比.但在新版的ASP.NET5中,可谓是牛气冲天,微软提供的Microsoft.Framework.Logging框架集可谓就是.NET版的SLF4J,提供相应的接口,其它第三方组件可以根据接口实现自己的实现. ILoggerFactory接口 ILoggerFactory接口是日志的入库点,在系统中通