设置error_reporting时,Yii2没有捕获致命错误

时间:2016-10-05 18:25:31

标签: php yii2

在index.php -

中将Yii2设置为生产模式时
defined('YII_DEBUG') or define('YII_DEBUG', false);
defined('YII_ENV') or define('YII_ENV', 'prod')

我有一个记录器,可以在生产模式下正确记录错误,并在用户页面上打印出相应的错误消息,但也会在通知上显示这些错误消息(不必要地删除页面)。 所以,我在index.php中设置了error_reporting -

error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT);

但是这会阻止Yii2捕获错误,因此它们不会被记录,并且在error_reporting允许的任何错误的情况下呈现空白页面。它可以防止通知终止页面,但是当我使用error_reporting()

时,记录退出工作

有没有Yii2这样做的合适方式?以前有人有这个问题吗?感谢所有尝试过的解决方案。

错误日志配置 -

    $log['targets'][] = [
    'class' => 'understeam\slack\LogTarget',
    'exportInterval' => 1,
    'levels' => ['error', 'warning'],
    'except' => [
        'yii\i18n*',
        'yii\web\HttpException:404',
        'yii\web\HttpException:403',
        'yii\web\ForbiddenHttpException',
        'yii\web\NotAcceptableHttpException',
        'yii\base\InvalidRouteException'
    ],
];

以上是使用供应商软件包“understeam / yii2-slack”:“~0.3”

1 个答案:

答案 0 :(得分:0)

对我来说这是一个有趣的案例,我有similar problem,我认为没有办法用内部Yii2 ErrorHandler来解决这个问题。所以我决定用扩展的ErrorHandler创建一个package,希望能解决你的问题。

安装它:

php composer.phar require cronfy/yii2-web-errorhandler

设置错误报告以报告所有错误:

error_reporting(E_ALL);

在yii config中配置错误处理程序组件:

'components' => [
    'errorHandler' => [
        'class' => 'cronfy\yii\web\ErrorHandler',
        'typesToExceptions' => YII_DEBUG ? E_ALL : false,
        'typesToLog' => E_ALL,
    ],

    // ... other components

],

使用此配置:

  1. 在DEBUG模式下,将记录所有错误并将其转换为例外。
  2. 在PRODUCTION模式下,所有错误也会被记录,但不会提供会破坏页面的异常。