需求:
调试程序时,有时需要了解最终执行的sql语句,特别是涉及到预编译,传参的情况。
配置方式:
打开工程的log4j.properties文件,添加如下配置:
log4j.logger.java.sql=DEBUG,SQL log4j.additivity.java.sql=false log4j.appender.SQL=org.apache.log4j.RollingFileAppender log4j.appender.SQL.File=${LOG_DIR}/sql.log log4j.appender.SQL.MaxFileSize=5000KB log4j.appender.SQL.MaxBackupIndex=50 log4j.appender.SQL.Append=true log4j.appender.SQL.layout=org.apache.log4j.PatternLayout log4j.appender.SQL.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %-5p %c %x - %m%n log4j.appender.SQL.encoding=UTF-8
重启工程,可以看到在日志输出目录下多了一个sql.log文件,打开就可以看到程序执行的所有的sql语句。
如:
[2014-07-19 15:49:57] DEBUG java.sql.Connection - {conn-100081} Preparing Statement: select dpt_id,name,icon from AQ_DEPARTMENT order by add_time ASC limit ?,?
[2014-07-19 15:49:57] DEBUG java.sql.PreparedStatement - {pstm-100082} Executing Statement: select dpt_id,name,icon from AQ_DEPARTMENT order by add_time ASC limit ?,?
[2014-07-19 15:49:57] DEBUG java.sql.PreparedStatement - {pstm-100082} Parameters: [0, 5]
[2014-07-19 15:49:57] DEBUG java.sql.PreparedStatement - {pstm-100082} Types: [java.lang.Integer, java.lang.Integer]
[2014-07-19 15:49:57] DEBUG java.sql.ResultSet - {rset-100083} ResultSet
[2014-07-19 15:49:57] DEBUG java.sql.ResultSet - {rset-100083} Header: [dpt_id, name, icon]
[2014-07-19 15:49:57] DEBUG java.sql.ResultSet - {rset-100083} Result: [1, 公安厅信通处, /img/department/1.jpg]
注意:生产环境,勿轻易打开,会很影响性能。