在Hyperf中开启DEBUG模式并打印完整错误堆栈,需设置APP_DEBUG=true、APP_ENV=dev,重启服务;确保ExceptionHandler正确调用printStackTrace(),日志级别不低于ERROR,并通过抛出测试异常验证Whoops页面与日志输出。

在 Hyperf 中开启 DEBUG 模式并打印完整错误堆栈,关键在于正确配置 APP_DEBUG 和日志级别,同时确保异常未被意外捕获或静默处理。
启用 APP_DEBUG 并设置环境为 dev
Hyperf 依赖 APP_DEBUG 环境变量控制是否显示详细错误信息(如 Whoops 页面)和是否记录完整堆栈。需确保:
- .env 文件中设置 APP_DEBUG=true(注意是布尔 true,不是字符串 "true")
- APP_ENV=dev(部分中间件和异常处理器行为受此影响)
- 重启服务(Hyperf 不支持热重载 .env 变更)
检查异常处理器是否覆盖了默认行为
若自定义了 ExceptionHandler,可能拦截了异常但未输出堆栈。确认:
- 继承自 Hyperf\ExceptionHandler\ExceptionHandler
-
printStackTrace()被调用(调试时可临时加var_dump($throwable->getTraceAsString());) - 未在
handle()中返回空响应或吞掉异常
查看日志中的完整堆栈
即使 HTTP 响应未显示堆栈,Hyperf 默认会将异常写入日志(runtime/logs/hyperf.log)。确保:
- 日志级别不低于 ERROR(检查
config/autoload/logger.php中的level) - 日志通道未被禁用或重定向到空驱动
- 使用
php bin/hyperf.php start启动(非php -S),以保证日志正常写入
触发错误时强制输出堆栈(开发调试用)
临时在代码中抛出测试异常,验证配置是否生效:
// 在任意控制器方法中
throw new RuntimeException('debug stack test');
此时应看到:
✅ 浏览器显示 Whoops 错误页(含完整文件/行号/调用链)
✅ 日志文件中记录相同堆栈(含上下文变量)



















