Логирование для PHP: лучшие решения
Логирование — важнейшая часть любого серьёзного PHP-приложения. Оно помогает отслеживать ошибки, анализировать поведение пользователей, проводить аудит безопасности и отлаживать код. В этой статье мы рассмотрим лучшие библиотеки для логирования в PHP, их особенности и примеры использования.
Зачем нужно логирование?
Без логирования разработчик часто остаётся "слепым" при возникновении проблем. Качественная система логирования позволяет:
- Быстро находить и исправлять ошибки в production-среде
- Собирать статистику и анализировать производительность
- Обеспечивать соответствие стандартам безопасности (PCI DSS, GDPR)
- Отслеживать подозрительную активность
Стандарт PSR-3 (Logger Interface)
Большинство современных библиотек для PHP следуют стандарту PSR-3, который определяет единый интерфейс для логгеров. Это позволяет легко заменять одну библиотеку на другую без изменения кода приложения.
Основные уровни логирования по PSR-3:
emergency— система неработоспособнаalert— требуется немедленное вмешательствоcritical— критическая ошибкаerror— ошибка, не требующая немедленного вмешательстваwarning— предупреждениеnotice— нормальное, но значимое событиеinfo— информационное сообщениеdebug— отладочная информация
Лучшие библиотеки для логирования в PHP
1. Monolog
Monolog — это де-факто стандарт для логирования в PHP. Он поддерживает PSR-3, имеет огромное количество "обработчиков" (handlers) и "форматтеров". Устанавливается через Composer:
composer require monolog/monolog
Пример базового использования:
<?php
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$log = new Logger('my_app');
$log->pushHandler(new StreamHandler('/var/log/app.log', Logger::WARNING));
$log->warning('Предупреждение: превышен лимит запросов');
$log->error('Ошибка подключения к БД', ['db' => 'mysql', 'time' => 0.5]);
?>
Monolog поддерживает отправку логов в файлы, базы данных, Slack, Telegram, Email, Syslog и многие другие каналы. Гибкая архитектура позволяет создавать собственные обработчики.
2. Analog
Analog — лёгкая и быстрая библиотека, ориентированная на простоту. Она не требует установки зависимостей и идеально подходит для небольших проектов.
<?php
require_once 'Analog.php';
Analog::handler(Analog\Handler\File::init('/var/log/app.log'));
Analog::log('Страница загружена', Analog::INFO);
?>
Analog поддерживает те же уровни логирования, что и PSR-3, но имеет собственный API. Для интеграции с PSR-3 можно использовать мост AnalogPSR3.
3. KLogger
KLogger — минималистичная библиотека, которая когда-то была популярна. Сейчас её развитие остановлено, но она всё ещё используется в старых проектах. Пример:
<?php
$log = new Katzgrau\KLogger\Logger('/var/log/');
$log->info('Пользователь вошёл в систему');
?>
Не рекомендуется для новых проектов из-за отсутствия поддержки PSR-3 и обновлений.
4. Log4php
Log4php — порт популярного Java-фреймворка Log4j. Поддерживает сложные конфигурации через XML или PHP-массивы:
<?php
require_once 'Logger.php';
Logger::configure('config.xml');
$logger = Logger::getLogger('main');
$logger->error('Критическая ошибка');
?>
Log4php имеет крутую кривую обучения, но предоставляет мощные возможности: фильтрацию, несколько аппендеров, макросы.
Сравнение библиотек
| Библиотека | PSR-3 | Простота | Гибкость | Популярность |
|---|---|---|---|---|
| Monolog | Да | Средняя | Высокая | Очень высокая |