使用log4jdbc实现打印完整带参数的sql语句日志

想要打印出来的sql是可以直接复制到数据库中去执行的sql语句?

[java.sql.PreparedStatement] - ==>  Executing: select * from t_admin limit ?,? 

[java.sql.PreparedStatement] - ==> Parameters: 5(Integer), 500(Integer)


现在的情况是:sql和参数分两行打印,想要的效果如下:

[java.sql.PreparedStatement] - ==> select * from t_admin limit 5,500

一、log4jdbc的简单介绍

      平时开发使用的ibatis,hibernate,spring jdbc的sql日志信息,有一点个缺点是占位符与参数是分开打印的,如果想要拷贝sql至PLSQL Developer客户端直接执行,需要自己拼凑sql。而log4jdbc是在jdbc层的一个日志框架,可以将占位符与参数全部合并在一起显示,方便直接拷贝sql在Mysql等客户端直接执行,加快调试速度。

二、log4jdbc的使用

       首先要下载log4jdbc的jar包log4jdbc-1.2.jar以及依赖的相关Jar包log4j-1.2.17.jar、slf4j-api-1.6.0.jar、slf4j-log4j12-1.7.7.jar。


        Maven 导包

<dependency>  
    <groupId>org.bgee.log4jdbc-log4j2</groupId>  
    <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>  
    <version>1.16</version>  
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.7</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.7</version>
</dependency>

如果不是maven项目就去百度下载这四个jar

接下来把我们的数据库连接驱动和url进行修改

jdbc.properties

driver=net.sf.log4jdbc.DriverSpy
url=jdbc:log4jdbc:mysql://127.0.0.1:3306/test
username=user01
password=user01
#\u5b9a\u4e49\u521d\u59cb\u8fde\u63a5\u6570  
initialSize=0  
#\u5b9a\u4e49\u6700\u5927\u8fde\u63a5\u6570  
maxActive=20  
#\u5b9a\u4e49\u6700\u5927\u7a7a\u95f2  
maxIdle=20  
#\u5b9a\u4e49\u6700\u5c0f\u7a7a\u95f2  
minIdle=1  
#\u5b9a\u4e49\u6700\u957f\u7b49\u5f85\u65f6\u95f4  
maxWait=60000

最后一步 log4j.properties

### set log levels ###    
log4j.rootLogger = DENUG , console , debug , error    
    
### console ###    
log4j.appender.console = org.apache.log4j.ConsoleAppender    
log4j.appender.console.Target = System.out    
log4j.appender.console.layout = org.apache.log4j.PatternLayout    
log4j.appender.console.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} [%p]-[%c] %m%n    
    
### log file ###    
log4j.appender.debug = org.apache.log4j.DailyRollingFileAppender    
log4j.appender.debug.File = ../logs/springmvc-demo.log    
log4j.appender.debug.Append = true    
log4j.appender.debug.Threshold = INFO    
log4j.appender.debug.layout = org.apache.log4j.PatternLayout    
log4j.appender.debug.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} [%p]-[%c] %m%n    
    
### exception ###    
log4j.appender.error = org.apache.log4j.DailyRollingFileAppender    
log4j.appender.error.File = ../logs/springmvc-demo_error.log    
log4j.appender.error.Append = true    
log4j.appender.error.Threshold = ERROR    
log4j.appender.error.layout = org.apache.log4j.PatternLayout    
log4j.appender.error.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} [%p]-[%c] %m%n    
    
    
###需要声明,然后下方才可以使druid sql输出,否则会抛出log4j.error.key not found    
log4j.appender.stdout=org.apache.log4j.ConsoleAppender    
log4j.appender.stdout.Target=System.out    
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout    
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %l %c%n%p: %m%n    
    
### druid sql ###    
log4j.logger.druid.sql=warn,stdout    
log4j.logger.druid.sql.DataSource=warn,stdout    
log4j.logger.druid.sql.Connection=warn,stdout    
log4j.logger.druid.sql.Statement=warn,stdout    
log4j.logger.druid.sql.ResultSet=warn,stdout  

好了,大功告成,看一下结果



猜你喜欢

转载自blog.csdn.net/m0_37974328/article/details/79682553
今日推荐