首页 > 解决方案 > Yii2 - 在生产中记录 500 个错误

问题描述

我试图在运行 Yii2 的生产环境中调试内部服务器错误。

为此,我EmailTarget在配置文件中添加如下

if(!YII_DEBUG){
    $logTarget[] = [
        'class' => 'yii\log\EmailTarget',
        'mailer' =>'mailer',
        'levels' => ['error'],
        'message' => [
            'from' => ['mail@example.com'],
            'to' => ['mymail@example.com'],
            'subject' => 'Log',
        ],
        'categories' => [
            'yii\db\*',
            'yii\web\HttpException:*',
        ],
        'except' => [
            'yii\web\HttpException:404',
            'yii\web\HttpException:403',
            'yii\web\HttpException:401'
        ]
    ];
}

然后

    'log' => [
        'traceLevel' => 3,
        'targets' => $logTarget,
    ],

我没有收到 500 个错误。我做错了吗?还是默认不记录 500 个错误

标签: phploggingyii2

解决方案


所以终于让它工作了。显然,'categories'这里阻止了 500 个错误的发送,因为大多数 500 个错误属于yii\base\Excetion而不是yii\web\HttpException. 因为,默认情况下,如果没有'categories'放置,所有错误都包括在内,只需从数组中删除它即可解决问题。

我的固定数组是:

if(!YII_DEBUG){
    $logTarget[] = [
        'class' => 'yii\log\EmailTarget',
        'mailer' =>'mailer',
        'levels' => ['error'],
        'message' => [
            'from' => ['mail@example.com'],
            'to' => ['mymail@example.com'],
            'subject' => 'Log',
        ],
        'except' => [
            'yii\web\HttpException:404',
            'yii\web\HttpException:403',
            'yii\web\HttpException:401'
        ]
    ];
}

推荐阅读