- PVSM.RU - https://www.pvsm.ru -

Логирование в Yii 2.0 и PSR-3

На дворе 2017-ый год и довольно значительная часть сообщества PHP пытается использовать
PSR: PHP standard recommendation [1], цель которых — дать возможность заменять отдельные части фреймворков. Среди PSR-ов есть PSR-3, в котором описывается интерфейс для логгера. На данный момент существует множество совместимых с PSR-3 библиотек, в числе которых широко применяемый Monolog [2].

На тему PSR-3 и Yii 2.0 часто задают следующие вопросы:

  1. Почему Yii 2.0 не совместим с PSR-3?
  2. Как мне писать сообщения в совместимый с PSR-3 логгер?
  3. Есть ли в планах сделать логгер Yii совместимым с PSR-3 и выпилить в отдельный пакет?

Разберём каждый подробно.

Почему Yii 2.0 не совместим с PSR-3?

Логер в Yii 2.0 [3] — один из добротно сделанных компонентов. Он стабилен, легко расширяется, работает быстро и умеет много всего. Разработан этот компонент был на ранних стадиях тогда ещё секретной пред-альфа версии фреймворка и с тех пор значительно не менялся. Дизайн очень близок к изначальному, который был в Yii 1.0, так что годом его формирования можно считать 2008.

Год важен, так как группа PHP-FIG, занимающаяся PSR-ами, сформировалась значительно позже. Во время альфа-версии Yii 2.0 у нас уже был проверенный рабочий дизайн логгера, отлично показавший себя на Yii 1.0 и Yii 1.1. В то время PSR-3 не был чем-то уж сильно привлекательным. Чего-то особенного логгеры, его реализующие, ещё не умели и, поэтому, плюсов в реализации этого PSR в Yii framework на тот момент не было. Решили не делать.

Сейчас пришло время рассмотреть решение ещё раз для версии 2.1 так как в совместимости с PSR-3 есть существенные плюсы.

Как мне писать сообщения в совместимый с PSR-3 логгер?

Логирование в Yii довольно гибко. Центральный компонент-диспетчер собирает сообщения и раскидывает их по индивидуальным целям логирования [4], которые, в свою очередь, пишут сообщения в файлы, отсылают почту и так далее.

Цели логирования легко расширять и создавать, так что написать свою не так уж сложно. С другой стороны, зачем что-то писать, когда есть популярные PSR-3 логгеры и, особенно,
Monolog [2]? Так и хочется использовать готовое. Например, отсылать сообщения в чат Slack.

Я реализовал расширение [5], которое позволяет использовать любой совместимый PSR-3 логгер как цель логирования.

Расширение приводит уровни логирования Yii к сходным уровням PSR-3 и отдаёт сообщения и сопутствующие данные на обработку PSR-3 логеру. Конфигурация довольно проста и описана на странице расширения [5].

Есть ли в планах сделать логгер Yii совместимым с PSR-3 и выпилить в отдельный пакет?

Yii никогда не старался быть набором независимых библиотек. Независимые компоненты — штука хорошая, но у независимости есть цена. Приходится отказываться от переиспользования кода из ядра фреймворка, что выливается в довольно большой объём кода как такового и, зачастую, переабстрагированные решения.

Логгер, в принципе, не сильно относится к написанному выше. Он практически не зависит от фреймворка. Наоборот — фреймворк зависит от него. Попытка сделать из логгера отдельную библиотеку, возможно, удастся и так как дизайн довольно хорош, есть шанс получить своё место среди таких независимых решений, как Monolog. Стоит попробовать и я попробую, если кампания на Patreon [6] даст мне достаточно времени для работы над OpenSource.

Автор: SamDark

Источник [7]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/open-source/248747

Ссылки в тексте:

[1] PSR: PHP standard recommendation: http://www.php-fig.org/psr/

[2] Monolog: https://github.com/Seldaek/monolog

[3] Логер в Yii 2.0: http://www.yiiframework.com/doc-2.0/guide-runtime-logging.html

[4] целям логирования: http://www.yiiframework.com/doc-2.0/guide-runtime-logging.html#log-targets

[5] расширение: https://github.com/samdark/yii2-psr-log-target

[6] кампания на Patreon: https://www.patreon.com/samdark

[7] Источник: https://habrahabr.ru/post/323584/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best