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('````````````````````````````````````````````````````````````````````````````');
            }
        });
    }
}

這樣以後查看接口日誌的時候,可以方便的看到接口請求的參數,以及返回的數據,方便調試錯誤等等,至於系統內置有哪些事件,百度谷歌肯定會有的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章