---
url: >-
  https://www.dreamlu.net/blog/2017-09-22-Print-executable-SQL-using-the-Druid-LogFilter.md
description: >-
  开发测试阶段想拿到完整可执行的 SQL，除了 log4jdbc 还有更轻的办法——Druid 内置的 LogFilter，一行配置即可输出带真实参数的
  SQL。
---

## 简介

通常在java项目开发为了防止sql注入我们通常都采用的预编译的sql，采用“?”号挂参，如下：

```sql
SELECT * FROM blog WHERE id = ?
```

往往在开发测试阶段能获取到完整的可执行的sql能帮我们及时的发现和定位问题。就有了很多朋友使用`log4jdbc`来记录SQL信息。

## Druid中LogFilter的配置项

如下图我们可以看到有一项`statementExecutableSqlLogEnable`默认为`false`

![druid 打印可执行sql](/images/druid-logfilter.png)

## 配置

这里我们以JFinal和Log4j最为演示的例子。

### java代码

```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中添加

```properties
log4j.logger.druid.sql.Statement=DEBUG
```

druid中支持的日志Filter

```java
Log4jFilter
Slf4jLogFilter
Log4j2Filter
CommonsLogFilter
```

## 开源推荐

* Spring boot 微服务高效开发 `mica` 工具集：<https://gitee.com/596392912/mica>
* `Avue` 一款基于vue可配置化的神奇框架：<https://gitee.com/smallweigit/avue>
* `pig` 宇宙最强微服务（架构师必备）：<https://gitee.com/log4j/pig>
* `SpringBlade` 完整的线上解决方案（企业开发必备）：<https://gitee.com/smallc/SpringBlade>
* `IJPay` 支付SDK让支付触手可及：<https://gitee.com/javen205/IJPay>
* 加入【如梦技术】Spring QQ群：479710041，了解更多。

## 微信公众号

![如梦技术](/img/dreamlu-weixin.jpg)

精彩内容每日推荐！！！
