Страница 1 из 1

Log + DbTarget + info

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

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

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

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

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

Re: Log + DbTarget + info

Добавлено: 2021.05.12, 13:57
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' );

Re: Log + DbTarget + info

Добавлено: 2021.05.13, 22:35
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'=>'*']
Было бы хорошо

Re: Log + DbTarget + info

Добавлено: 2021.05.14, 02:21
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',
                ],

Re: Log + DbTarget + info

Добавлено: 2021.05.14, 09:55
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',
                ],
Спасибо! Это интересно, надо попробовать! Что-то я об этом и не подумал )

Re: Log + DbTarget + info

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