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
本文永久更新連結地址: