druid可通过启用statfilter和logfilter并配置日志级别实现详细sql执行日志;需在application.yml中配置filters: stat,logback,设置logslowsql、slowsqlmillis及各loggername,并在logback-spring.xml中将druid.sql.statement等设为debug级。

Druid 本身不直接输出完整的 SQL 执行日志(比如参数绑定后的实际 SQL、执行耗时、返回行数等),但可以通过组合配置 + 日志框架(如 Logback 或 Log4j2)+ Druid 的内置监控和 Filter 机制,实现接近“详细 JDBC 执行日志”的效果。核心是启用 StatFilter 和 LogFilter,并正确配置日志级别。
启用 StatFilter 获取执行统计信息
StatFilter 是 Druid 提供的性能监控过滤器,它会自动记录每条 SQL 的执行时间、是否出错、影响行数、参数值(可选)、执行堆栈等。需在数据源配置中显式开启:
- Spring Boot(application.yml)中添加:
注意:filters: stat,log4j2 表示同时启用统计和日志记录;若用 Logback,则写 logback(Druid 3.0+ 支持,旧版需用 slf4j 并确保桥接正常)。
配置 LogFilter 输出可读的 SQL 日志
LogFilter 负责将 SQL 执行事件以日志形式输出。默认只打 INFO 级别日志,内容较简略。要获得“详细日志”,关键在于:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 设置
logSlowSql=true可标记慢 SQL(配合slowSqlMillis) - 开启
connectionLoggerName、statementLoggerName、resultSetLoggerName,分别控制连接、语句、结果集的日志输出位置 - 在日志框架中将对应 Logger 设置为 DEBUG 或 TRACE 级别(例如
druid.sql.Statement)
调整日志框架级别(以 Logback 为例)
仅配置 Druid 的 Filter 不够,必须让底层日志框架真正输出这些事件。在 logback-spring.xml 中添加:
此时你会看到类似这样的日志:
[DEBUG] druid.sql.Statement - {conn-10001, pstmt-20001} exec sql : SELECT * FROM user WHERE id = ? Parameters : [123]✅ 包含连接 ID、语句 ID、SQL 模板、参数值 —— 这就是最实用的“详细 JDBC 执行日志”。
注意事项与常见问题
- 参数打印依赖
toString(),自定义对象需重写该方法,否则显示com.example.User@xxx - 批量操作(executeBatch)默认不打印每条 SQL 的参数,只记总数;如需逐条记录,需结合
Statement.setPoolable(false)或自定义 Filter - 生产环境慎开 DEBUG 级别,尤其高并发场景,日志 I/O 会影响性能
- Druid 1.2.x 默认使用
slf4j,若用 Logback 且没看到日志,检查是否引入了slf4j-logback桥接器
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










