使用log4jdbc在不改變原有代碼的狀況下,就能夠收集執行的SQL文和JDBC執行狀況。html
平時開發使用的ibatis,hibernate,spring jdbc的sql日誌信息,有一點個缺點是佔位符與參數是分開打印的,若是想要拷貝sql至PLSQL Developer客戶端直接執行,須要本身拼湊sql。而log4jdbc是在jdbc層的一個日誌框架,能夠將佔位符與參數所有合併在一塊兒顯示,方便直接拷貝sql在PLSQL Developer等客戶端直接執行,加快調試速度。java
Maven:3.5.2(點擊下載) ,下載頁mysql
Tomcat:8.5.29(點擊下載) ,下載頁
linux
JDK:jdk1.7.0_80(點擊下載) ,下載頁spring
MavenDependency:sql
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.45</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.6.10.Final</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.5.0</version> </dependency> <!-- 日誌 START --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>com.googlecode.log4jdbc</groupId> <artifactId>log4jdbc</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> <exclusions> <!--排除jdmk、jms的依賴引入--> <exclusion> <artifactId>jmxtools</artifactId> <groupId>com.sun.jdmk</groupId> </exclusion> <exclusion> <artifactId>jms</artifactId> <groupId>javax.jms</groupId> </exclusion> </exclusions> </dependency> <!-- 日誌 END -->
1. 配置 log4j 的 src/main/resources/log4j.properties 的配置文件,以下所示:數據庫
#日誌種類,參考連接 http://blog.csdn.net/dr_guo/article/details/50718063
#level是日誌記錄的優先級,分爲OFF,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,ALL
#線上配置須要關閉console控制檯輸出,不然tomcat的catalina.out文件會過大
#log4j.rootLogger=ALL,logDailyFile,logRollingFile
#開發配置須要開啓console控制檯輸出
log4j.rootLogger=ALL,console,logDailyFile,logRollingFile
#輸出到控制檯
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#log4j.appender.console.layout.ConversionPattern=%d -%m%n
log4j.appender.console.layout.ConversionPattern=[%-22d{yyyy-MM-dd HH:mm:ssS} | %p | %t | %l]: %n%m%n%n
#DEBUG,INFO,WARN,ERROR
log4j.appender.console.Threshold=DEBUG
#默認值是true,全部的消息都會被當即輸出
log4j.appender.console.ImmediateFlush=TRUE
#DBlog, http://blog.csdn.net/u011686226/article/details/68932890
#以上日誌種類均可以設置爲 DEBUG , INFO 或 ERROR 級別。當設置爲 FATAL 或 OFF 時,意味關閉記錄。
#如下是一個採用 Log4j 做爲具體日誌系統的典型配置,將這些配置到 log4j.properties 裏面:
#
#僅打印出執行 SQL
log4j.logger.jdbc.sqlonly=DEBUG,sql,console
#log4j.logger.jdbc.sqlonly=DEBUG,sql
#打印出執行 SQL 以及耗時信息
log4j.logger.jdbc.sqltiming=OFF,sqltiming,console
#打印出執行sql和結果集
log4j.logger.jdbc.resultsettable=OFF,console
#記錄鏈接打開、關閉等信息,有利於調試數據庫鏈接相關問題
log4j.logger.jdbc.connection=OFF,connection
#會產生更多的記錄信息,由於記錄了 ResultSet 的信息
log4j.logger.jdbc.resultset=OFF,jdbc
#記錄除了 ResultSet 以外的全部 JDBC 調用信息,會產生大量的記錄,有利於調試跟蹤具體的 JDBC 問題
log4j.logger.jdbc.audit=OFF,jdbc
#the appender used for the JDBC API layer call logging above, sql only
log4j.appender.sql=org.apache.log4j.FileAppender
log4j.appender.sql.Append=true
log4j.appender.sql.layout=org.apache.log4j.PatternLayout
log4j.appender.sql.File=/home/server/tomcat8/xxx_server/logs/sql/sql.log
log4j.appender.sql.layout.ConversionPattern=-----> %d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%n
#the appender used for the JDBC API layer call logging above, sql timing
log4j.appender.sqltiming=org.apache.log4j.FileAppender
log4j.appender.sqltiming.File=/home/server/tomcat8/xxx_server/logs/sql/sqltiming.log
log4j.appender.sqltiming.Append=true
log4j.appender.sqltiming.layout=org.apache.log4j.PatternLayout
log4j.appender.sqltiming.layout.ConversionPattern=-----> %d{yyyy-MM-dd HH:mm:ss.SSS} %m%n%n
#the appender used for the JDBC API layer call logging above
log4j.appender.jdbc=org.apache.log4j.FileAppender
log4j.appender.jdbc.File=/home/server/tomcat8/xxx_server/logs/sql/jdbc.log
log4j.appender.jdbc.Append=true
log4j.appender.jdbc.layout=org.apache.log4j.PatternLayout
log4j.appender.jdbc.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n
#the appender used for the JDBC Connection open and close events
log4j.appender.connection=org.apache.log4j.FileAppender
log4j.appender.connection.File=/home/server/tomcat8/xxx_server/logs/sql/connection.log
log4j.appender.connection.Append=true
log4j.appender.connection.layout=org.apache.log4j.PatternLayout
log4j.appender.connection.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %m%n
2. 配置 src/main/resources/log4jdbc.properties 文件,可省略配置,不配置該文件,會使用默認值apache
#log4jdbc.debug.stack.prefix=
#log4jdbc.debug.stack.prefiis=
#log4jdbc.sqltiming.warn.threshold=
#log4jdbc.sqltiming.error.threshold=
log4jdbc.dump.booleanastruefalse=false
log4jdbc.dump.sql.maxlinelength=90
log4jdbc.dump.fulldebugstacktrace=false
log4jdbc.statement.warn=false
log4jdbc.dump.sql.select=true
log4jdbc.dump.sql.insert=true
log4jdbc.dump.sql.update=true
log4jdbc.dump.sql.delete=true
log4jdbc.dump.sql.create=true
log4jdbc.dump.sql.addsemicolon=false
log4jdbc.auto.load.popular.drivers=true
log4jdbc.trim.sql=true
log4jdbc.trim.sql.extrablanklines=true
log4jdbc.suppress.generated.keys.exception=false
#log4jdbc.drivers
3. 修改 dbconfig.properties 配置文件的 url 和 driverClassNamewindows
#url:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8 #driverClassName:com.mysql.jdbc.Driver url:jdbc:log4jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8 driverClassName:net.sf.log4jdbc.DriverSpy
通過這樣的配置以後,就可使用 log4jdbc 記錄應用系統執行的SQL信息了。api
PS:
https://www.cnblogs.com/xdp-gacl/p/4081848.html
https://www.cnblogs.com/cnjavahome/p/8421846.html
http://blog.csdn.net/u011686226/article/details/68932890