有不少人问如何在输出 sql 的同时输出查询所用的参数,再转发 @dreamlu 的一篇博文,希望对大家有用:
通常在java项目开发为了防止sql注入我们通常都采用的预编译的sql,采用“?”号挂参,如下:SELECT * FROM blog WHERE id = ?
往往在开发测试阶段能获取到完整的可执行的sql能帮我们及时的发现和定位问题。就有了很多朋友使用log4jdbc来记录SQL信息
Druid中LogFilter的配置项
如下图我们可以看到有一项statementExecutableSqlLogEnable默认为false
配置
这里我们以JFinal和Log4j最为演示的例子
java代码// 配置Druid数据库连接池插件
DruidPlugin druidPlugin = new DruidPlugin(jdbcUrl, user, password);
// 配置log插件
Log4jFilter logFilter = new Log4jFilter();
logFilter.setStatementLogEnabled(false);
logFilter.setStatementLogErrorEnabled(true);
logFilter.setStatementExecutableSqlLogEnable(true);
druidPlugin.addFilter(logFilter);
log4j.properties中添加log4j.logger.druid.sql.Statement=DEBUG
druid中支持的日志FilterLog4jFilter
Slf4jLogFilter
Log4j2Filter
CommonsLogFilter