Логирование для PHP: лучшие решения и библиотеки

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Логирование для PHP: лучшие решения и библиотеки

Логирование — один из ключевых аспектов разработки любого веб-приложения. Без качественного логирования невозможно эффективно отлаживать ошибки, отслеживать поведение пользователей или анализировать производительность системы. В экосистеме PHP существует несколько зрелых решений, которые заслуживают внимания. В этой статье мы рассмотрим лучшие библиотеки для логирования, их особенности и примеры использования.

Зачем нужно логирование в PHP?

Логирование позволяет разработчикам:

  • Фиксировать критические ошибки и исключения;
  • Отслеживать последовательность действий пользователя;
  • Анализировать производительность и узкие места;
  • Собирать данные для аудита безопасности;
  • Интегрироваться с внешними системами мониторинга (Graylog, ELK, Sentry).

Стандарт PSR-3 (PHP Standards Recommendation) определяет единый интерфейс для логгеров, что делает библиотеки взаимозаменяемыми.

1. Monolog — стандарт де-факто

Monolog — самая популярная библиотека для логирования в PHP. Она полностью соответствует PSR-3 и поддерживает десятки обработчиков (handlers) и форматтеров.

Основные возможности:

  • Отправка логов в файлы, базы данных, syslog, Slack, Telegram, email;
  • Поддержка ротации файлов и сжатия;
  • Гибкая настройка уровней логирования (debug, info, notice, warning, error, critical, alert, emergency);
  • Процессоры для добавления контекстной информации (IP, User-Agent, время выполнения).

Пример установки и использования:

composer require monolog/monolog
<?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('Предупреждение: превышение лимита запросов', ['ip' => '192.168.1.1']);
$log->error('Ошибка базы данных', ['query' => 'SELECT * FROM users']);
?>

Monolog легко интегрируется с фреймворками (Laravel, Symfony) и может использоваться как standalone-библиотека.

2. Log4php — порт популярного Java-решения

Log4php — адаптация известной Java-библиотеки Log4j для PHP. Поддерживает иерархические логгеры, различные аппендеры и макеты (layouts).

Ключевые особенности:

  • Конфигурация через XML или свойства (properties);
  • Поддержка фильтрации по уровням и категориям;
  • Встроенные аппендеры: файл, база данных, syslog, консоль;
  • Возможность создания собственных аппендеров.

Пример конфигурации и использования:

<?php
require_once 'log4php/Logger.php';
Logger::configure('config.xml');

$logger = Logger::getLogger('main');
$logger->info('Приложение запущено');
$logger->error('Не удалось подключиться к БД');
?>
<!-- config.xml -->
<configuration xmlns="http://logging.apache.org/log4php/">
    <appender name="default" class="LoggerAppenderFile">
        <param name="file" value="logs/app.log" />
    </appender>
    <root>
        <level value="DEBUG" />
        <appender_ref ref="default" />
    </root>
</configuration>

Log4php хорошо подходит для проектов, мигрирующих с Java, или для тех, кто ценит строгую иерархию логгеров.

3. KLogger — простота и минимализм

KLogger — легковесная библиотека, которая не требует внешних зависимостей. Идеальна для небольших проектов или скриптов.

Особенности:

  • Запись логов в файл с автоматической ротацией по дням;
  • Поддержка уровней логирования (emergency, alert, critical, error, warning, notice, info, debug);
  • Минимальный код — около 200 строк;
  • Поддержка PSR-3 (с версии 2.0).

Пример использования:

composer require katzgrau/klogger
<?php                    

Рекомендаций