From e9afccda6cd736f5704a7e9921b6c12938ea7a00 Mon Sep 17 00:00:00 2001 From: Vasiliy Baukin Date: Thu, 18 Sep 2014 23:51:27 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4=20ru?= =?UTF-8?q?ntime-logging=20=D0=BD=D0=B0=20=D1=80=D1=83=D1=81=D1=81=D0=BA?= =?UTF-8?q?=D0=B8=D0=B9=20=D1=8F=D0=B7=D1=8B=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/guide-ru/runtime-logging.md | 116 +++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 docs/guide-ru/runtime-logging.md diff --git a/docs/guide-ru/runtime-logging.md b/docs/guide-ru/runtime-logging.md new file mode 100644 index 0000000000..4c223aee2f --- /dev/null +++ b/docs/guide-ru/runtime-logging.md @@ -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).