Логирование для PHP: лучшие решения и инструменты
Логирование — одна из ключевых задач при разработке любого веб-приложения на PHP. Без качественного логирования невозможно эффективно отлаживать код, отслеживать ошибки в production-среде и анализировать поведение пользователей. В этой статье мы рассмотрим лучшие библиотеки и инструменты для логирования в PHP, их особенности и примеры использования.
Почему важно правильно логировать?
Простой вызов error_log() или запись в файл через file_put_contents() перестаёт быть достаточным, когда проект разрастается. Современные решения предлагают:
- Поддержку PSR-3 (стандарт интерфейса логирования);
- Гибкие обработчики (файлы, БД, syslog, email, Slack);
- Форматирование сообщений (JSON, plain text, HTML);
- Уровни логирования (debug, info, notice, warning, error, critical, alert, emergency);
- Возможность фильтрации и ротации логов.
1. Monolog — стандарт де-факто
Monolog — самая популярная библиотека для логирования в PHP (более 300 миллионов загрузок на Packagist). Она полностью соответствует PSR-3 и поддерживает десятки обработчиков (handlers) и форматтеров.
Установка
composer require monolog/monolog
Пример использования
<?php
require 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\FirePHPHandler;
// Создаём логгер
$log = new Logger('my_app');
$log->pushHandler(new StreamHandler(__DIR__.'/app.log', Logger::WARNING));
$log->pushHandler(new FirePHPHandler());
// Логируем сообщения
$log->warning('Внимание: превышен лимит запросов');
$log->error('Ошибка подключения к БД', ['db' => 'mysql', 'time' => 1.5]);
?>
Ключевые возможности
- Handlers: StreamHandler, RotatingFileHandler, SyslogHandler, SwiftMailerHandler, SlackHandler и др.
- Formatters: LineFormatter, JsonFormatter, HtmlFormatter, LogstashFormatter.
- Processors: добавление контекста (IP, URI, сессия) к каждому сообщению.
- Поддержка групп логгеров и каналов.
Monolog идеально подходит для крупных проектов, фреймворков (Symfony, Laravel используют его по умолчанию) и микросервисной архитектуры.
2. KLogger — лёгкая альтернатива
KLogger — простая, но эффективная библиотека для тех, кому не нужны сотни обработчиков. Она реализует PSR-3 и работает "из коробки".
Установка
composer require katzgrau/klogger
Пример использования
<?php
require 'vendor/autoload.php';
use Katzgrau\KLogger\Logger;
$log = new Logger(__DIR__.'/logs');
$log->info('Пользователь зарегистрирован', ['user_id' => 42]);
$log->debug('Отладка: запрос к API', ['url' => '/api/v1/data']);
?>
Особенности
- Автоматическая ротация логов по дате;
- Минимальное количество зависимостей;
- Поддержка уровней логирования;
- Простой API (всего несколько методов).
KLogger подходит для небольших проектов, скриптов и приложений, где важна простота.
3. Analog — гибкий и минималистичный
Analog — библиотека, которая позволяет легко менять способ логирования без изменения кода. Она использует концепцию "машины" (machine), которая определяет, куда и как писать логи.
Установка
composer require analog/analog
Пример использования
<?php
require 'vendor/autoload.php';
use Analog\Analog;
use Analog\Handler\File;
// Настраиваем запись в файл
Analog::handler(File::init(__DIR__.'/app.log'));
// Логируем
Analog::warning('Требуется обновление кэша');
Analog::error('Критическая ошибка в модуле payments');
?>
Ключевые возможности
- Встроенные обработчики: File, Mail, Slack, Syslog, Stderr;
- Возможность создавать собственные обработчики;
- Поддержка PSR-3 (через адаптер