利用的是Yii2的事件(events
),当接口请求到达,系统处理,返回数据,都会触发Yii2内置的一些事件(下文用到的事件是yii\base\Application::EVENT_AFTER_REQUEST
),我们要做的就是给这个被触发的事件添加一段处理程序
main.php添加配置
'bootstrap' => ['common\components\events\AfterRequest(这个是自定义类)']
实现事件类
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('````````````````````````````````````````````````````````````````````````````');
}
});
}
}
这样以后查看接口日志的时候,可以方便的看到接口请求的参数,以及返回的数据,方便调试错误等等,至于系统内置有哪些事件,百度谷歌肯定会有的。