Yii2记录接口的请求日志,请求参数以及返回的数据

利用的是Yii2的事件(events),当接口请求到达,系统处理,返回数据,都会触发Yii2内置的一些事件(下文用到的事件是yii\base\Application::EVENT_AFTER_REQUEST),我们要做的就是给这个被触发的事件添加一段处理程序

  1. main.php添加配置
    'bootstrap' => ['common\components\events\AfterRequest(这个是自定义类)']

  2. 实现事件类

namespace common\components\events;

use common\components\Tool;
use Yii;
use yii\base\Event;

/**
 1. 记录接口的请求日志
 2. Class AfterRequest
 3. @package common\components\events
 */
class AfterRequest extends Event {
    public function init(){
        Yii::$app->on(yii\base\Application::EVENT_AFTER_REQUEST, function($event){
            $moduleId =  Yii::$app->controller->module->id;
            if(in_array($moduleId,array('app-api'))){
                $requestParams = Tool::getParam();
                $requestIp = Yii::$app->request->getUserIP();
                $requestTime = time();
                $route = Yii::$app->controller->getRoute();
                $requestUrl =  Yii::$app->request->getHostInfo() . Yii::$app->request->getUrl();

                $data = ob_get_contents();
                Tool::writeLog(date('Y-m-d H:i:s',$requestTime)  . ' [' . $requestIp . '] [' . $route . '] '. $requestUrl);
                Tool::writeLog('Params:' . json_encode($requestParams));
                Tool::writeLog('Return:' . $data);
                Tool::writeLog('````````````````````````````````````````````````````````````````````````````');
            }
        });
    }
}

这样以后查看接口日志的时候,可以方便的看到接口请求的参数,以及返回的数据,方便调试错误等等,至于系统内置有哪些事件,百度谷歌肯定会有的。

你可能感兴趣的:(Yii)