Как скрыть лишнюю информацию из логов в Yii2?

· Блог · 2 мин чтения

В Yii2 есть несколько вариантов логирования, один из них это используя .log файлы, который хранятся внутри директории runtime. В Yii2 basic — это runtime, в advanced они разделены на frontendbackend и common и уже внутри находится папка runtime. Но дело не в этом, а в том, что в них записывается много мусора, который там абсолютно не нужен и в этой записи я покажу как от него избавиться.

В предыдущей записи я уже описывал процесс настраивания логов в Yii2, поэтому в этой записи пойдет речь только о более подробных настройках.

Убрать trace уровень

Первое что вы можете сделать — это убрать trace уровень если он у вас присутствует в конфиге:

[
    'class' => 'yii\log\FileTarget',
    'levels' => ['error', 'warning', 'trace'],
...
]

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

Использовать except и указать ненужные классы

Изначально в логах будут записываться все логи, включая SQL запросы, профили и остальное.

Давайте уберем от туда SQL запросы, профили и остальной лишний мусор используя параметр except:

[
    'class' => 'yii\log\FileTarget',
    'levels' => ['error', 'warning'],
    ...
    'except' => ['yii\db\*', 'yii\web\*', 'yii\base\*'],
]

Чтобы подробнее понять что убирается, можете сами подебажить и сравнить логи с except и без него.

Таким же образом можно и исключить определенный вывод Exception’ов, например если вы хотите удалить все 404 ошибки, то пишите yii\web\HttpException:404 и дело в шляпе. Вы так же можете указать «*» вместе «404» и вы уберете все Exception’ы.

Так же не забывайте

Не забывайте, что после того как вы удалите YII_DEBUG, то логов будет еще меньше. По умолчанию YII_DEBUG добавляет stack trace, но благодаря if условия внутри tradeLevel (пример ниже), вы не будете отображать Exception’ы и остальное, когда запустите проект в продакшн.

'log' => [
     'traceLevel' => YII_DEBUG ? 3 : 0,
     ...
]

При YII_DEBUG будут отображаться все Exception’ы уровня 3. Каждый уровень пониже будет отображать меньше и меньше логов не касающихся проекта во время выхода «в свет».