Простое логирование в Yii2

Yii2
Добавлено: 10 сент. 2018 г.

В Yii2 «из коробки» уже имеется компонент логирования. По-умолчанию все логи сохраняются в basic версии фреймворка по пути: runtime\logs\app.log, а в advanced: frontend/runtime/logs/app.log  для frontend и backend/runtime/logs/app.log для backend.

Стандартная конфгурация

'log' => [
    'traceLevel' => YII_DEBUG ? 3 : 0,
    'targets' => [
        [
            'class' => 'yii\log\FileTarget',
            'levels' => ['error', 'warning'],
         ],
    ],
],

В yii2 имеются несколько целей логов:

yii\log\DbTarget: записывает логи в БД

yii\log\EmailTarget: отправляет логи на E-mail

yii\log\FileTarget: сохраняет логи в файлы (используется по-умолчанию)

yii\log\SyslogTarget: сохраняет сообщения логов в системный лог, используя syslog().

Цели - это экземпляр класса yii\log\Target или класса, унаследованного от него. Цель фитрует логи по уровню важности и категории, а далее отправляет в одно из вышеперечисленных хранилищ.

Фильтрация логов

Для каждой цели можно настроить свойства levels и categories, которые указывают уровни важности и категории соответственно.

Уровни:

Свойство levels принимает массив, содержащий одно или несколько следующих значений:

  • error: соответствует сообщениям, сохраненным методом Yii::error().
  • warning: соответствует сообщениям, сохраненным методом Yii::warning().
  • info: соответствует сообщениям, сохраненным методом Yii::info().
  • trace: соответствует сообщениям, сохраненным методом Yii::debug().
  • profile: соответствует сообщениям, сохраненным методами Yii::beginProfile() и Yii::endProfile()
[
    'class' => 'yii\log\FileTarget',
    'levels' => ['error', 'warning'],
    ...
]

В данном примере в массиве levels имеется два элемента, указывающих, что логирование будет записываться в двух случаях: error и warning. 

Если свойство levels не задано, цель логов будет обрабатывать сообщения с любым уровнем важности.

Категории:

Свойство categories принимает массив, содержащий имена категорий или шаблоны. Цель будет обрабатывать только те сообщения, категория которых совпадает с одним из значений или шаблонов этого массива. Шаблон категории должен состоять из префикса имени категории и звездочки * на конце. Имя категории совпадает с шаблоном, если оно начинается с префикса шаблона. Например, yii\db\Command::execute и yii\db\Command::query используются в качестве имен категорий сообщений, записанных в классе yii\db\Command. Оба они совпадают с шаблоном yii\db\*.

Если свойство categories не задано, цель будет обрабатывать сообщения любой категории.

...
'categories' => [
        'yii\db\*',
        'yii\web\HttpException:*',
    ],
...

Помимо шаблонов, можно так же использовать свои категории и устанавливать директорию сохранения файла логов.

[
    ...
    'categories' => ['my_product'], //категория логов
    'logFile' => '@runtime/logs/product.log', //куда сохранять
    ...
],

Запись логов осуществляется статическим методом Yii::info($log, 'category');

Первый аргумент - это сообщение лога, второй - категория. Аргумент $log может принимать как строку, так и массивы.

Более подробно можете почитать в русскоязычной версии документации