Article

Yii2 Логирование

Логирование - запись определенных действий(событий системы)
**По-умолчанию в yii2 со старта включены логи:

# 1 в качестве компонента системы :
'log' => [
      'traceLevel' => YII_DEBUG ? 3 : 0,
      'targets' => [
          [
              'class' => 'yii\log\FileTarget',
              'levels' => ['error', 'warning'],
          ],
      ],
  ],
# 2 компонент с пула включен в автозагрузку
'bootstrap' => ['log','languagepicker'],

В стандартной формации записываются логи уровня error и warning(см выше в настройки компонента) в файл:
  • app\runtime\logs\app.log
  • frontend\runtime\logs\app.log
Варианты, куда можно писать логи (можно из-под коробки)
  1. файл
  2. системный файл
  3. БД
  4. отправлять письмом

Карта зависимости:
yii\log\FileTarget ==> yii\log\Target ==> yii\log\Component ==> yii\base\BaseObject

Итак, пройдёмся по порядку:


1) Как записать лог?

Нужно знать, какой именно лог ты хочешь записать (об критической ошибке, warning,мб просто информация полезная и т.п)
Для этого у нас есть yii\log\Target->setLevels(), в котором присутствуют такие уровни:

  1. error
  2. warning
  3. info -> простой информативный лог
  4. trace -> лог, предназначенный для записи структур данных
  5. profile -> лог, предназначен для разработки, позволяет смотреть например время отработки скрипта, и затраченные на это ресурсы.

ОК, есть уровни логов, теперь, зная, что именно мы хотим логировать, можно записывать логи:

метод для логирования: Yii::methodName($message,$category)
# пример 1 Простой информативный лог
Yii::info('this is simple log message');
И если $message вопросов не вызывает, то что такое $category?
Категория логов - это как категория в новости. Когда я пишу, что Реал выиграл ЛЧ в 2017, я занесу новость в раздел спорт.
Когда я записываю логи, к примеру по транзакциям денежных средств, я хотел бы, чтобы эти логи записывались бы в отдельную категорию, 
которая, как и пример выше, имела бы своё предназначение.
По дефолту, $category='application';
Если я хочу записать свою отдельную категорию, в компонентах


  'log' => [
      'traceLevel' => YII_DEBUG ? 3 : 0,
      'targets' => [
       [
        'class' => 'yii\log\FileTarget',
        'categories'=>['test123'],
        'logFile'=>"@runtime/logs/test123.log", //меняю стандартный лог файл на свой
        'levels'=>['info'], // указываю, какие уровни логов вообще тут можно записывать,
        // если массив пустой, то все
        'logVars' => [],// какие глобальные переменные должны попать в лог
        // если массив пустой, то никакие
       ],

В результате, получаем вот такой файл, когда отработает скрипт:

2018-07-22 12:52:42 [127.0.0.1][-][-][info][test123] Test 123132123132
    in /var/www/my-project.loc/controllers/LearnController.php:37

Итак, какие же есть методы для отправки логов?

  1. Yii::log
  2. Yii::error
  3. Yii::warning
  4. Yii::trace
  5. Yii::beginProfile(),Yii::endProfile()
  6. Yii::debug

Профилирование:

Yii::beginProfile('test1','performance');
# мой кусок кода, который потом запрофилируется
$a = $controller->runAction('view2', [
$model
]);
Yii::endProfile('test1','performance');
$pRes = Yii::getLogger()->getProfiling(['performance']);
Yii::info($pRes,'performance');






Third-party source 2
Dropdown
test 123