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

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

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

Начать курс

Логирование для 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 (через адаптер

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