Log + DbTarget + info

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
mikola123
Сообщения: 42
Зарегистрирован: 2016.04.22, 22:39

Log + DbTarget + info

Сообщение mikola123 »

Добрый день!
Подскажите, как точно настроить Logger. Я пытаюсь в логи выводить действия пользователя с помощью

Код: Выделить всё

Yii::info();
Но в БД сыпется все подряд.
С одной стороны можно запретить выполнение в некоторых категориях типа:

Код: Выделить всё

'except' => [
                    'yii\db\Command::query',
                    'yii\db\Connection::open',
                    'yii\db\Command::execute'
                ],
Но не возникнут ли в данных категориях 'error' или 'warning'.
Вопрос как правильно использовать Yii::info() и может есть какой-то общий список категорий, которые надо заблокировать?
Может можно использовать другую функцию
Yii::userInfo();
Чтобы отделить логику фреймворка от бизнес процессов.
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Log + DbTarget + info

Сообщение vitalik1183 »

https://yiiframework.com.ua/ru/doc/guid ... g-messages
Для упрощения работы с сообщениями лога и их фильтрации, рекомендуется явно указывать подходящую категорию для каждого сообщения.
Регистрируйте в конфиге, например:

Код: Выделить всё

[
					'class'          => 'yii\log\FileTarget',
					'exportInterval' => 1,
					'levels'         => [ 'info' ],
					'categories'     => [ 'lalala' ],
					'logFile'        => '@runtime/logs/lalala.log',
					'logVars'        => [],
				],
И юзайте:

Код: Выделить всё

\Yii::info('Message', 'lalala' );
Yii2!
mikola123
Сообщения: 42
Зарегистрирован: 2016.04.22, 22:39

Re: Log + DbTarget + info

Сообщение mikola123 »

vitalik1183 писал(а): 2021.05.12, 13:57 https://yiiframework.com.ua/ru/doc/guid ... g-messages
Для упрощения работы с сообщениями лога и их фильтрации, рекомендуется явно указывать подходящую категорию для каждого сообщения.
Регистрируйте в конфиге, например:

Код: Выделить всё

[
					'class'          => 'yii\log\FileTarget',
					'exportInterval' => 1,
					'levels'         => [ 'info' ],
					'categories'     => [ 'lalala' ],
					'logFile'        => '@runtime/logs/lalala.log',
					'logVars'        => [],
				],
И юзайте:

Код: Выделить всё

\Yii::info('Message', 'lalala' );
В таком случае не будут работать 'levels' => ['error', 'warning']
Т.к. указана категория из которой необходимо собирать логи.
Если бы было так:

Код: Выделить всё

'categories' => ['info' => 'lalala', 'error' => '*', 'warning'=>'*']
Было бы хорошо
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Log + DbTarget + info

Сообщение Alexum »

Можно настроить несколько типов файлов логов под разные цели.

Код: Выделить всё

// Пример для отдельного файла под каждого пользователя под IIS.
$infoFileName = strtolower(preg_replace("/[^a-z]/iu", '_', $_SERVER['AUTH_USER']));
$errorFileName = $infoFileName . '_' . date('Y_m_d');
	...
	...
	...
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['info'],
                    'maxLogFiles' => 1,
                    'logFile' => '@runtime/logs/info/' . $infoFileName . '.log',
                    'except' => ['yii\db\*'],
                ],
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['warning','error'],
                    'maxLogFiles' => 1,
                    'logFile' => '@runtime/logs/errors/' . $errorFileName . '.log',
                ],
mikola123
Сообщения: 42
Зарегистрирован: 2016.04.22, 22:39

Re: Log + DbTarget + info

Сообщение mikola123 »

Alexum писал(а): 2021.05.14, 02:21 Можно настроить несколько типов файлов логов под разные цели.

Код: Выделить всё

// Пример для отдельного файла под каждого пользователя под IIS.
$infoFileName = strtolower(preg_replace("/[^a-z]/iu", '_', $_SERVER['AUTH_USER']));
$errorFileName = $infoFileName . '_' . date('Y_m_d');
	...
	...
	...
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['info'],
                    'maxLogFiles' => 1,
                    'logFile' => '@runtime/logs/info/' . $infoFileName . '.log',
                    'except' => ['yii\db\*'],
                ],
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['warning','error'],
                    'maxLogFiles' => 1,
                    'logFile' => '@runtime/logs/errors/' . $errorFileName . '.log',
                ],
Спасибо! Это интересно, надо попробовать! Что-то я об этом и не подумал )
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Log + DbTarget + info

Сообщение vitalik1183 »

Спасибо! Это интересно, надо попробовать! Что-то я об этом и не подумал )
Я же вам это и предложил в своем сообщении!
В таком случае не будут работать 'levels' => ['error', 'warning']
Все будет работать, добавьте отдельный таргет и пишите туда Ваши сообщения. А 'error', 'warning' пусть сыплются по-дефолту!
Yii2!
Закрыто