ThinkPHP开启SQL日志需启用debug模式、设置log_sql为true,并在log配置中包含sql级别,日志默认写入runtime/log/目录,可单独输出至sql.log文件。

ThinkPHP 自带的日志系统可以方便地记录 SQL 执行语句,尤其在开发调试阶段非常实用。默认情况下,SQL 日志是关闭的,需要手动开启并配置日志级别和输出方式。
开启 SQL 日志记录
在应用配置文件(如 app/config.php 或 config/database.php)中,确保数据库配置启用调试模式,并设置日志记录选项:
- 将 debug 设为 true(全局调试开关)
- 在数据库配置中设置 ‘log_sql’ => true(部分版本需配合 ‘trace’ => true)
- 确认日志驱动已启用(默认 File 驱动即可,无需额外配置)
配置日志级别与目标
SQL 日志属于 sql 类型日志,需确保日志系统允许该类型输出。在 config/log.php 中检查或添加:
- ‘level’ => [‘sql’, ‘error’, ‘info’] —— 显式包含 sql 级别
- ‘type’ => ‘file’ 并确认 ‘path’ 可写(如 runtime/log/)
- 可选:设置 ‘single’ => true 让 SQL 单独写入 sql.log 文件
验证 SQL 是否被记录
执行一条数据库操作(如 UserModel::find(1)),然后查看 runtime/log/ 目录下的日志文件:
立即学习“PHP免费学习笔记(深入)”;
- 若启用了 single 模式,打开 sql.log,应看到类似 [ SQL ] SELECT * FROM `user` WHERE `id` = 1 [ RunTime:0.0012s ]
- 若未单独分离,可在 xxxx.log 中搜索 “[ SQL ]” 字样
- 注意:仅在 debug=true 且有实际查询执行时才会记录,空查询或缓存命中不记
进阶:自定义 SQL 日志格式或输出到控制台
如需更灵活控制(比如开发时直接在浏览器 Console 查看),可扩展日志行为:
- 在 app/common.php 或中间件中监听 Db::event(‘sql_explain’) 或使用 thinkdbConnection 的 setLog() 方法注入回调
- 通过 thinkfacadeLog::write(‘sql’, $sql) 手动写入(适合拦截后加工)
- 配合浏览器调试工具,可用 console.log 输出到前端(需搭配 Ajax 接口或调试面板)
不复杂但容易忽略的是:确保 runtime/log 目录有写权限,且没有因错误配置导致日志静默失效。开启后,每次查询都会留下痕迹,对分析慢 SQL、排查条件拼接问题特别有效。
文章来自机圈观察员网,发布者:,转载请注明出处:https://www.jqgcy.com/shoujipingce/124177.html