码迷,mamicode.com
首页 > 其他好文 > 详细

Yii错误异常处理

时间:2019-05-12 13:59:07      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:targe   没有   eve   sel   use   脚本   self   程序   handler   

背景

当程序中出现不可预期的错误,比如说除0异常,yii会给我们扔出这个异常信息,由于现在都是读写分离,客户端调你的api,都是协商好的数据格式,如果业务方没有兼容你的异常返回,客户端出现异常错误,影响也挺恶心。

再者,写些脚本的时候,出现不可预期的异常没有记到日志中,对于我们排查错误也是大大的麻烦。好在,yii提供错误处理,看看官方文档:错误处理

默认的错误处理是 (web)https://www.yiichina.com/doc/api/2.0/yii-web-errorhandler (console)https://www.yiichina.com/doc/api/2.0/yii-console-errorhandler
通过重写renderException方法,就可以达到自定义的错误输出。

web错误处理

web.php 配置:

...
 'errorHandler' => [
            'class' => 'app\controllers\ErrorController',
            'errorAction' => 'site/error',
        ],
...

ErrorController.php

<?php

namespace app\controllers;

use app\modules\Common;
use Yii;


class ErrorController extends \yii\web\ErrorHandler{

    protected function renderException($exception){

        //todo 业务处理异常
        //if( Yii::$app->request->getIsPost() && !Yii::$app->request->get('fullerror')){
        //    return Common::echoJson(500, $exception->getMessage());
        //}

        parent::renderException($exception);
    }

}

console错误处理

console.php

...
   'errorHandler' => [
            'class' => 'app\commands\ErrorController'
        ],

ErrorController.php

<?php
namespace app\commands;

use Yii;
use yii\helpers\FileHelper;
use yii\log\FileTarget;
use yii\log\Logger;


class ErrorController extends \yii\base\ErrorHandler{

    protected function renderException($exception){

        //业务处理异常
        $errMsg = "文件位置:{$exception->getFile()} 所在行:{$exception->getLine()}\n". "错误:".$exception->getMessage();
        self::writeLog('sys_exception.log',date('Y-m-d H:i:s') . "{$errMsg}\n");
    }


    public static function writeLog($fileName, $message,$categories='')
    {
        $logPath = Yii::$app->getRuntimePath() . '/logs/' . date("Ymd") . "/";
        FileHelper::createDirectory($logPath);
        $file = new FileTarget();
        $file->logFile = $logPath . $fileName;
        $file->messages[] = [$message, Logger::LEVEL_INFO, $categories, time()];
        $file->export();
    }
}

Yii错误异常处理

标签:targe   没有   eve   sel   use   脚本   self   程序   handler   

原文地址:https://www.cnblogs.com/followyou/p/10851944.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!