Log4jdbc資料庫訪問日誌架構使用

來源:互聯網
上載者:User

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("完成");
    }
}

使用Log4jdbc-log4j2監聽MyBatis中啟動並執行SQL和Connection 

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.