Trace不显示的主因是缓存未清或配置冲突;需同时设APP_DEBUG=true与APP_TRACE=true(.env中严格无空格)、删整个runtime目录、确保日志level含'sql',且仅HTML响应生效。

Trace不显示,90%不是“没开”,而是缓存没清干净或配置被覆盖了。直接删 runtime 目录、确认 .env 无空格、关掉 APP_DEBUG=true 的残留定义,比反复改 config 更有效。
APP_DEBUG 和 APP_TRACE 必须同时为 true 才能触发 Trace
只设 APP_TRACE=true 而 APP_DEBUG=false,右下角图标根本不会渲染;反过来,APP_DEBUG=true 但 APP_TRACE=false,页面只会显示错误堆栈,没有 Trace 面板。两者是 AND 关系,缺一不可。
必须通过 .env 文件设置(TP8 官方唯一推荐方式),且格式严格:
-
APP_DEBUG=true(等号两侧**不能有空格**) APP_TRACE=true- 若入口文件
public/index.php顶部还残留define('APP_DEBUG', true),会干扰环境变量加载,导致APP_TRACE失效
删 runtime 不是“删一部分”,而是整个目录清空
TP8 的配置、路由、模板编译全部固化在 runtime/ 下,哪怕只留一个 runtime/container/ 或 runtime/cache/,都可能让旧配置继续生效。
立即学习“PHP免费学习笔记(深入)”;
正确操作是:
- 执行
rm -rf runtime/(Linux/macOS)或手动删除整个runtime文件夹(Windows) - 确保 Web 服务器用户对
runtime/有写权限(Docker/Nginx 常见权限不足) - 用 VS Code 或 Notepad++ 确认
.env是 UTF-8 **无 BOM** 编码——BOM 会导致框架静默跳过该文件
SQL 标签页为空?检查 log.php 的 level 配置
Trace 面板里的 SQL 内容不是实时抓取的,而是从日志系统读取。即使 APP_TRACE=true,如果日志级别没包含 sql,面板就只显示查询数量,不展示语句。
打开 config/log.php,确认 'level' 数组中包含 'sql':
return [
'level' => ['error', 'sql', 'notice'],
];若使用自定义数据库连接(如读写分离),还需检查是否手动关闭了 trace_sql——默认开启,但一旦关闭,SQL 就不会进日志。
Trace 只在 HTML 响应中出现,JSON 接口里永远不显示
这是设计行为,不是 bug。访问 /api/user 这类返回 JSON 的接口,右下角图标天然不会出现;必须访问返回完整 HTML 的路由(如 /、/index)才能看到 Trace 图标。
另外,APP_DEBUG=true 时,框架会跳过所有缓存(包括路由、配置、模板),所以开发阶段建议保持该状态;但上线前务必改回 false,否则性能断崖式下跌——这点容易被忽略,且无法靠清缓存补救。



















