如何利用ThinkPHP日志系统记录SQL执行语句【调试】

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

如何利用thinkphp日志系统记录sql执行语句【调试】

ThinkPHP 自带的日志系统可以方便地记录 SQL 执行语句,尤其在开发调试阶段非常实用。默认情况下,SQL 日志是关闭的,需要手动开启并配置日志级别和输出方式。

开启 SQL 日志记录

在应用配置文件(如 app/config.phpconfig/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’) 或使用 thinkdbConnectionsetLog() 方法注入回调
  • 通过 thinkfacadeLog::write(‘sql’, $sql) 手动写入(适合拦截后加工)
  • 配合浏览器调试工具,可用 console.log 输出到前端(需搭配 Ajax 接口或调试面板)

不复杂但容易忽略的是:确保 runtime/log 目录有写权限,且没有因错误配置导致日志静默失效。开启后,每次查询都会留下痕迹,对分析慢 SQL、排查条件拼接问题特别有效。

文章来自机圈观察员网,发布者:,转载请注明出处:https://www.jqgcy.com/shoujipingce/124177.html

PHP 8.5.7 的致命型错误回溯机制如何帮助开发者精准定位崩溃根源【总结】
上一篇 2026-07-01 18:26
下一篇 2026-07-01 18:26

相关推荐