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
全面支持JDBC 3和JDBC 4!框架
容易配置,在大多數狀況下,你須要作的是改變驅動類名net.sf.log4jdbc.DriverSpy的,並在前面加上「爲jdbc:log4jdbc」到你現有的JDBC URL,創建你的日誌記錄類別。post
示例:jdbc:log4jdbc:mysql://192.168.0.207:3306/mall
自動SQL輸出。這大大提升了許多狀況下的可讀性和調試。
能夠打印SQL的執行時間,用來調試SQL的執行效率。
生成SQL鏈接數信息,以幫助識別鏈接池或線程問題。
底層的JDBC驅動程序的兼容,使用JDK 1.4以上和SLF4J 1.x
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
<?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("完成"); } }