要让 ThinkPHP 6.0 记录 SQL 日志,必须同时满足:开启 app_debug、数据库配置中 'debug' => true 且 'logger' => ['sql' => true]、log 配置 level 包含 'sql'。

要让 ThinkPHP 6.0 记录 SQL 语句日志,核心是同时满足三个条件:应用处于调试状态、数据库驱动开启调试、日志系统明确接收 sql 级别消息。缺一不可,否则日志里根本不会出现 SQL。
确保 app_debug 开启
这是前提中的前提。TP6 不在调试模式下,SQL 日志机制直接不启动。
- 在 config/app.php 中确认:
'app_debug' => true - 或更推荐方式:在 .env 文件中设置:
APP_DEBUG=true - 注意:
APP_DEPLOY_MODE=true或配置中'deploy' => true会强制关闭所有调试行为,即使 app_debug 为 true 也无效,务必设为 false
启用数据库调试与 SQL 日志开关
仅开 app_debug 不够,数据库连接层必须主动参与日志记录。
- 在 config/database.php 的数据库连接配置(如 mysql)中,确保:
'debug' => true - 显式开启 SQL 日志通道:
'logger' => ['sql' => true](TP6.1+ 推荐写法);旧版可使用'log_sql' => true - 部分环境需额外设置触发开关:
'trigger_sql' => true,尤其在自定义连接或事件监听场景下
配置日志级别包含 sql
日志系统默认会过滤掉未声明的级别,sql 必须被显式列入 level 数组。
- 在 config/log.php 的
'level'配置中,加入'sql':'level' => ['error', 'sql', 'notice'] - 不能只写
['debug']或['info']—— TP6 对sql是独立识别的级别,不等价于 debug - 若用环境变量控制,确保
LOG_LEVEL=error,sql,notice在框架加载前已生效
验证与定位日志文件
日志不会输出到浏览器或控制台,默认落地为文件。
- 执行一次数据库操作(如
Db::table('user')->select()) - 查看 runtime/log/年月日/xxx.log 文件(如
runtime/log/20261029/sql-20261029.log) - 搜索关键词
[ sql ],正常应看到类似:[ sql ] SELECT * FROM user WHERE id = ? ; Time: 0.0012s - 若目录为空或无内容,检查
runtime/log/目录权限(需 PHP 进程有写入权限),并确认 log.path 配置路径正确
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











