Alexander Makarov
10 years ago
1 changed files with 116 additions and 0 deletions
@ -0,0 +1,116 @@
|
||||
Логгирование |
||||
============ |
||||
|
||||
> Раздел находится в разработке |
||||
|
||||
В Yii встроен гибкий и расширяемый логгер, который способен обрабатывать сообщения в соответствии с их уровнем важности и типом. |
||||
С его помощью также можно фильтровать вообщения по разными критериям и пересылать их в файлы, email, в дебаггер и т.п. |
||||
|
||||
Основы логгирования |
||||
------------------- |
||||
|
||||
В самом простом виде логгирование - это просто вызов метода, как в примере ниже: |
||||
|
||||
```php |
||||
\Yii::info('Привет, я - тестовое сообщение лога'); |
||||
``` |
||||
|
||||
Вы можете логгировать как данные срокового типа, так и более сложные структуры данных, такие как массивы и объекты. |
||||
Если логгируемые данные - не строка, обработчики логов по умолчанию сериализуют значение, используя [[yii\helpers\Vardumper::export()]]. |
||||
|
||||
### Категории сообщений |
||||
|
||||
Вы можете указать категорию сообщения, чтобы разделить сообщения разного типа в дальнейшем, и по разному их обработать. |
||||
Категория сообщения передается вторым аргументом методов логгирования. По умолчанию присваивается категория `application`. |
||||
|
||||
### Уровни важности |
||||
|
||||
Доступно несколько уровней важности и соответствующим им методов логгирования: |
||||
|
||||
- [[Yii::trace]] в основном используется в разработке, чтобы логгировать прогресс выполнения кода. Заметьте, что он работает только в |
||||
режиме разработки, когда константа `YII_DEBUG` имеет значение `true`. |
||||
- [[Yii::error]] используется в случае невосстановимой ошибки. |
||||
- [[Yii::warning]] используется, когда произошла ошибка, но исполнение может быть продолжено. |
||||
- [[Yii::info]] используется, чтобы фиксировать информацию о важных событиях, таких как логин администратора. |
||||
|
||||
Цели сообщений |
||||
------------------ |
||||
|
||||
Когда вызывается один из логгирующих методов, сообщение передается компоненту [[yii\log\Logger]], доступному через |
||||
`Yii::getLogger()`. Логгер хранит сообщения в памяти, и когда сообщений достаточно для отправки, или когда |
||||
заканчивается текущий запрос, отправляет сообщения по целям назначения, таким как файл или email. |
||||
|
||||
|
||||
Вы можете конфигурировать цели сообщений таким образом: |
||||
|
||||
```php |
||||
[ |
||||
'bootstrap' => ['log'], // убеждаемся, что логгер загружается до запуска приложения |
||||
'components' => [ |
||||
'log' => [ |
||||
'targets' => [ |
||||
'file' => [ |
||||
'class' => 'yii\log\FileTarget', |
||||
'levels' => ['trace', 'info'], |
||||
'categories' => ['yii\*'], |
||||
], |
||||
'email' => [ |
||||
'class' => 'yii\log\EmailTarget', |
||||
'levels' => ['error', 'warning'], |
||||
'message' => [ |
||||
'to' => ['admin@example.com', 'developer@example.com'], |
||||
'subject' => 'Новое сообщение логгера example.com', |
||||
], |
||||
], |
||||
], |
||||
], |
||||
], |
||||
] |
||||
``` |
||||
|
||||
В конфигурации выше мы назначает две цели: [[yii\log\FileTarget|file]] и [[yii\log\EmailTarget|email]]. В обоих случаях |
||||
мы фильтруем сообщения по важности, а в случае с записью в файл еще и по категории. `yii\*` значит все категории, начинающиеся с `yii\`. |
||||
|
||||
Каждая цель может иметь имя, и к ней можно обращаться через [[yii\log\Logger::targets|targets]] следующим образом: |
||||
|
||||
```php |
||||
Yii::$app->log->targets['file']->enabled = false; |
||||
``` |
||||
|
||||
Когда приложение заканчивает работу, или когда достигнут предел количества сообщений [[yii\log\Logger::flushInterval|flushInterval]], логгер |
||||
вызовет метод [[yii\log\Logger::flush()|flush()]] для отправки сообщений по маршрутам. |
||||
|
||||
> Обратите внимание, что в примере выше мы добавили компонент `log` в список [автозагрузки](runtime-bootstrapping.md) компонентов, чтобы |
||||
он инициализировался в самом начале жизненного цикла приложения, чтобы, в свою очередь, убедиться, что логгирование будет происходить с самого начала |
||||
приложения. |
||||
|
||||
|
||||
Профилирование |
||||
-------------- |
||||
|
||||
Профилирование - особый тип сообщений, который может быть использован для замера времени, необходимого определенным |
||||
блокам кода для отработки, чтобы выяснить, где можно улучшить производительность. |
||||
|
||||
Чтобы пользоваться профилированием нужно понять, какие блоки кода нужно профилировать. Затем нужно отметить начало и конец каждого блока, вызывая |
||||
нижеследующие методы: |
||||
|
||||
```php |
||||
\Yii::beginProfile('myBenchmark'); |
||||
...блок кода для профилирования... |
||||
\Yii::endProfile('myBenchmark'); |
||||
``` |
||||
|
||||
где `myBenchmark` - уникальный идентификатор блока кода. |
||||
|
||||
Заметьте, что блоки кода должны быть правильно вложены друг в друга. Посмотрите пример ниже: |
||||
|
||||
```php |
||||
\Yii::beginProfile('block1'); |
||||
// код блока 1 |
||||
\Yii::beginProfile('block2'); |
||||
// код блока два, который входит в блок один |
||||
\Yii::endProfile('block2'); |
||||
\Yii::endProfile('block1'); |
||||
``` |
||||
|
||||
Результаты профилирования [можно отображать в дебаггере](module-debug.md). |
Loading…
Reference in new issue