Log the URLs users visited in Yii 2
- By Preneesh AV --
- 26-Jul-2018 --
- 61 Comments
Yii 2 behavior to log the URLs user have visited on our Yii 2 powered application.
Lets get started.
1.Create a behavior folder in the commons/behaviors/ directory,then create LogactionBehavior.php.
<?php
namespace common\behaviors;
use Yii;
use yii\web\Controller;
use yii\base\Behavior;
use yii\web\Request;
class LogactionBehavior extends Behavior
{
/**
*
* @var yii\web\Request
*/
private $request;
/**
* Use dependency injection to inject yii\web\Request
* @param array $config
* @param yii\web\Request $request
*/
public function __construct($config =[],Request $request)
{
parent::__construct($config);
$this->request = $request;
}
/**
* Activation of events
* Register beforeAction to Controller::EVENT_BEFORE_ACTION
* Register afterAction to Controller::EVENT_AFTER_ACTION
* @return array
*/
public function events()
{
return [
Controller::EVENT_BEFORE_ACTION => 'beforeAction',
Controller::EVENT_AFTER_ACTION => 'afterAction'
];
}
/**
* log
*/
public function beforeAction()
{
Yii::beginProfile('myBenchmark');//log user activty to,myBenchmark---change modify the name
Yii::info( "=====================================================================" ,'preneesh');
$date =date("Y/m/d h:i:sa");
//$url = $this->request->url;
$url = Yii::$app->getRequest()->url;
$ip = Yii::$app->getRequest()->getUserIP();
$params = Yii::$app->getRequest()->getRawBody();
$newactivity = ' User: '.Yii::$app->user->identity->UsersID.' | ip: '.Yii::$app->request->userIp.' | method: '.Yii::$app->request->method.' | url: '.Yii::$app->request->url.' | referer: '.Yii::$app->request->referrer.' | useragent: '.Yii::$app->request->userAgent;
Yii::info($newactivity,'preneesh');
$log =" preneesh".$date." | url: ".$url." | ip: ".$ip." |body start: ".$params." | body finish ";
Yii::info($log,'preneesh');
}
public function afterAction()
{
Yii::endProfile('myBenchmark');//end analysis
}
}
2. Go to the controller which require to be logged and add below code.
//log request
use common\behaviors\LogactionBehavior;
public function behaviors()
{
return [
LogactionBehavior::className(),
];
}
3 Add to application configuration api/main.php
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'flushInterval'=> 1,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
'logFile' => '@runtime/logs/app.log',
'exportInterval'=>1,
],
[
'class' => 'yii\log\FileTarget',
'levels' => ['info','profile'],
'logFile' => '@runtime/logs/info.log',
'exportInterval'=>1,
],
[
'class' => 'yii\log\FileTarget',
// 'levels' => ['info'],
'logVars' => [],
'categories' => ['preneesh'],
'logFile' => '@runtime/logs/custom.log',
'exportInterval'=>1,
],
],
],
