Как можно реализовать логгер всех запросов на сайте.
Все request, responce, body, queryParams
Логгер для всех запросов на сайте
- @edifanoff
- Сообщения: 3
- Зарегистрирован: 2019.03.30, 15:30
Re: Логгер для всех запросов на сайте
Поведением, навешанным на before/afterRequest.
- @edifanoff
- Сообщения: 3
- Зарегистрирован: 2019.03.30, 15:30
Re: Логгер для всех запросов на сайте
Что-то типо такого?
Код: Выделить всё
class MrLogger
{
const CATEGORY_REQUEST_NAME = 'REQUEST';
const CATEGORY_RESPONSE_NAME = 'RESPONSE';
public $request;
public $response;
public function __construct()
{
$this->request = Yii::$app->getRequest();
$this->response = Yii::$app->getResponse();
}
public function logRequest()
{
$method = strtoupper($this->request->getMethod());
$uri = $this->request->getPathInfo();
$bodyAsJson = json_encode($this->request->rawBody);
$message = "{$method} {$uri} - {$bodyAsJson}";
Yii::info($message, self::CATEGORY_REQUEST_NAME);
}
public function logResponse()
{
$method = strtoupper($this->request->getMethod());
$uri = $this->request->getPathInfo();
$bodyAsJson = json_encode($this->response->data);
$message = "{$method} {$uri} - {$bodyAsJson}";
Yii::info($message, self::CATEGORY_RESPONSE_NAME);
}
}
Код: Выделить всё
'MrLogger' => [
'class' => \common\components\MrLogger::class,
],
],
'on afterRequest' => function () {
Yii::$app->get('MrLogger')->logRequest();
Yii::$app->get('MrLogger')->logResponse();
},
Re: Логгер для всех запросов на сайте
Код: Выделить всё
class LogBehavior extends Behavior
{
public function events(): array
{
return [
Application::EVENT_BEFORE_REQUEST => 'beforeRequest',
Application::EVENT_AFTER_REQUEST => 'afterRequest',
];
}
public function beforeRequest(): void
{
$method = strtoupper(Yii::$app->request->getMethod());
...
Yii::info($message, 'REQUEST');
}
public function afterRequest(): void
{
$method = strtoupper(Yii::$app->request->getMethod());
...
Yii::info($message, 'RESPONSE');
}
}
Код: Выделить всё
'as log' => LogBehavior::class,
- @edifanoff
- Сообщения: 3
- Зарегистрирован: 2019.03.30, 15:30
Re: Логгер для всех запросов на сайте
Дмитрий, респект тебе!ElisDN писал(а): ↑2019.04.02, 11:55Код: Выделить всё
class LogBehavior extends Behavior { public function events(): array { return [ Application::EVENT_BEFORE_REQUEST => 'beforeRequest', Application::EVENT_AFTER_REQUEST => 'afterRequest', ]; } public function beforeRequest(): void { $method = strtoupper(Yii::$app->request->getMethod()); ... Yii::info($message, 'REQUEST'); } public function afterRequest(): void { $method = strtoupper(Yii::$app->request->getMethod()); ... Yii::info($message, 'RESPONSE'); } }
Код: Выделить всё
'as log' => LogBehavior::class,
Спасибо