log4jdbc數據庫訪問日誌框架使用

log4jdbc官網地址

http://code.google.com/p/log4jdbc/ java

https://github.com/arthurblake/log4jdbcmysql

當前最新版本是1.2, 支持JDBC3, JDBC4git

log4jdbc是在jdbc層的一個日誌框架,能夠將佔位符與參數所有合併在一塊兒顯示,方便直接拷貝sql在數據庫客戶端運行github

未使用log4jdbc記錄的SQL:
sql

 select count(*) from region where id=?數據庫

使用 log4jdbc記錄的SQL:apache

select count(*) from region where id='gz'app

log4jdbc特色

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

  2. 容易配置,在大多數狀況下,你須要作的是改變驅動類名net.sf.log4jdbc.DriverSpy的,並在前面加上「爲jdbc:log4jdbc」到你現有的JDBC URL,創建你的日誌記錄類別。post

    示例: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("完成");
    }
}
相關文章
相關標籤/搜索