Hyperf 默认生产环境屏蔽错误,开发时需设 app.php 中 debug => true、使用 DevelopmentExceptionHandler、确保 APP_DEBUG=1 且清缓存重启服务,方可显示完整错误堆栈。

Hyperf 默认开启了错误屏蔽机制(即生产环境下不显示详细错误信息),若需在开发或调试阶段查看完整错误堆栈,需关闭该机制。核心在于调整 app.php 和 error_handler.php 配置,并确保环境变量正确。
修改 app.php 中的 debug 配置
Hyperf 的调试开关由 config/autoload/app.php 中的 debug 选项控制。设为 true 可启用详细错误输出:
- 打开
config/autoload/app.php - 确认
'debug' => env('APP_DEBUG', true),已启用,且环境变量APP_DEBUG=1或直接写死为true - 该配置影响异常处理器是否渲染详细错误页面及是否记录敏感上下文
检查 error_handler.php 的异常处理策略
Hyperf 的错误处理器位于 config/autoload/error_handler.php,它决定了异常如何被响应。关闭屏蔽需确保不主动捕获并“静默”处理异常:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 确认
'throwable_handler' => Hyperf\ExceptionHandler\Handler\ProductionExceptionHandler::class未被强制指定(开发时建议使用DevelopmentExceptionHandler) - 若自定义了异常处理器,检查其
handle()方法是否调用了$response->json()或$response->html()隐藏了原始错误 - 可临时将处理器改为
Hyperf\ExceptionHandler\Handler\DevelopmentExceptionHandler以获得带堆栈的 HTML 错误页
验证环境变量与 CLI 启动参数
即使配置正确,环境变量或启动方式也可能覆盖设置:
- 运行服务时确保未通过
--env=prod强制切换环境;开发建议用php bin/hyperf.php start(默认读取.env) - 检查
.env文件中APP_DEBUG=1和APP_ENV=dev是否存在且未被注释 - CLI 启动时若传入
APP_DEBUG=0环境变量,会优先于配置文件生效
清除配置缓存(必要时)
Hyperf 会缓存配置,修改后可能不立即生效:
- 执行
php bin/hyperf.php vendor:publish --force(非必需,仅当配置文件结构变更) - 更常用的是清空
runtime/container和runtime/config目录 - 重启服务后访问一个会触发错误的接口(如故意抛出
throw new \Exception('test');),观察是否返回完整堆栈而非通用 500 页面

















