🛠 Инструменты: Логируй так, чтобы не переписывать — 23 марта 2026 г. в 17:49:55.630
🛠 Инструменты: Логируй так, чтобы не переписывать Привет! На связи Бурый. В одном из прошлых сообщений я рассказал, какого подхода придерживаюсь при логировании. А сегодня расскажу о том, как это лучше делать в коде. Начну сразу с анонса: в следующем посте покажу свою реализацию CombineLogger, которая упрощает мне жизнь. А сегодня - база, без которой эта реализация не имела бы смысла. В проектах часто используют логи. Monolog, нативный логгер из фреймворка или свои велосипеды... вариантов много. Проблема возникает, когда нужно заменить одну библиотеку на другую. Если код завязан на конкретную реализацию - правки будут по всему проекту. PSR-3 решает эту проблему раз и навсегда. PSR-3 - это единый интерфейс для логирования. Любая библиотека, которая его реализует, становится взаимозаменяемой. Вот как он выглядит: interface LoggerInterface { public function emergency(string $message, array $context = []); public function alert(string $message, array $context = []); public function critical(string $message, array $context = []); public function error(string $message, array $context = []); public function warning(string $message, array $context = []); public function notice(string $message, array $context = []); public function info(string $message, array $context = []); public function debug(string $message, array $context = []); public function log($level, string $message, array $context = []); } 👍 Что даёт PSR-3: ➕ Гибкость: сменил библиотеку - не меняешь код ➕ Единый подход: любой разработчик понимает, как логировать ➕ Структурированные логи: передавай контекст, а не склеивай строки Мой подход: ✅ Всегда принимаю в конструктор Psr\Log\LoggerInterface. ✅ Никакой привязки к Monolog или другой библиотеке - только интерфейс! ✅ Контекст - это сила: передаю структурированные данные, а не склеиваю строки. Пример, как не надо: $this->logger->error('Ошибка оплаты для заказа 12345, пользователь 678, сумма 100.5'); Пример, как надо: $this->logger->error('Ошибка оплаты', [ 'order_id' => 12345, 'user_id' => 678, 'amount' => 100.50 ]); Второй вариант позволяет фильтровать логи по полям в Elasticsearch, не требует парсинга строк и легко читается и расширяется. Стандарты - это не про бюрократию. Это про то, чтобы код не приходилось переписывать. PSR-3 занимает 5 минут на внедрение, но экономит часы при смене инструментов и дебаггинге. 👇 А вы используете PSR-3 в проектах? Или пишете свои врапперы? Делитесь в комментариях! Подписывайтесь на Бурый.dev - дальше будет еще больше живых советов из практики!

