如何在Yii2中记录PHP Deprecated Warning且不显示?
问题描述
将PHP从8.0升级到8.1后,出现大量PHP Deprecated Warning。为后续适配PHP8.2进行修复,希望在PHP8.1环境下静默记录这些警告,而非直接关闭提示。当前设置error_reporting(E_ALL)时Yii2会显示错误,不符合静默需求,现有Yii2的main.php日志配置如下:
'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], ], ]
请问需要调整哪些Yii2和PHP设置,才能仅记录这些警告且不中断代码运行?
解决方案
一、PHP配置调整
- 保持错误报告包含Deprecated警告,但禁止前端输出错误:
可在php.ini中全局设置:
也可在项目入口文件(如error_reporting = E_ALL display_errors = Off log_errors = Onindex.php)中动态配置:
此设置确保PHP不会将错误输出到页面,但会保留错误捕获能力,供Yii2日志系统处理。error_reporting(E_ALL); ini_set('display_errors', 'Off'); ini_set('log_errors', 'On');
二、Yii2框架配置调整
Yii2会自动捕获PHP错误并转化为框架日志消息,需调整配置确保Deprecated警告被正确记录且不展示:
- 更新日志目标配置
PHP8+的Deprecated警告在Yii2中会被归类为deprecation级别,需在日志目标中添加该级别,并指定对应分类,可单独存放日志方便排查:'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning', 'deprecation'], 'categories' => ['yii\base\ErrorException', 'php'], 'logFile' => '@app/runtime/logs/deprecation.log', // 可选:单独存储Deprecated警告 ], ], - 关闭前端错误显示
在main.php的components中配置errorHandler,禁止Yii2在页面展示错误:'errorHandler' => [ 'displayErrors' => false, 'errorAction' => null, // 取消错误跳转页面 ], - 验证效果
运行项目后,检查runtime/logs下的日志文件,确认Deprecated警告被正常记录,同时前端无错误输出,代码运行不受影响。
内容的提问来源于stack exchange,提问作者kasoft
相关产品推荐
相关产品推荐

