PHPackages                             fi1a/log - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Logging &amp; Monitoring](/categories/logging)
4. /
5. fi1a/log

ActiveLibrary[Logging &amp; Monitoring](/categories/logging)

fi1a/log
========

PHP библиотека ведения журнала (логирования)

0155PHP

Since Feb 22Pushed 3y ago1 watchersCompare

[ Source](https://github.com/fi1a/log)[ Packagist](https://packagist.org/packages/fi1a/log)[ RSS](/packages/fi1a-log/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

PHP библиотека ведения журнала (логирования)
============================================

[](#php-библиотека-ведения-журнала-логирования)

[![Latest Version](https://camo.githubusercontent.com/8d843a2ed58bac6d8938317e0278f5b6bedfe07c32c6b497de114dd307e9bc9f/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f666931612f6c6f673f6c6162656c3d72656c65617365)](https://packagist.org/packages/fi1a/log)[![Software License](https://camo.githubusercontent.com/8b75aebbcc6a728aafce337701b27584082ee565bc94e53f57f0b4b21034c78d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f666931612f6c6f673f7374796c653d666c61742d737175617265)](https://github.com/fi1a/log/blob/master/LICENSE)[![PHP Version](https://camo.githubusercontent.com/326090a3e047366ee45fc7bebc1d0e5aac420169302bd9c99c95e61c47965279/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f666931612f6c6f673f7374796c653d666c61742d737175617265)](https://php.net)[![Coverage Status](https://camo.githubusercontent.com/0c967d746eb7f4fe28065a3b94d23faa207cd6f4a968535b20fce0310a87cf89/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f7665726167652d3130302532352d677265656e)](https://camo.githubusercontent.com/0c967d746eb7f4fe28065a3b94d23faa207cd6f4a968535b20fce0310a87cf89/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f7665726167652d3130302532352d677265656e)[![Total Downloads](https://camo.githubusercontent.com/e06da04a22b9126810f307065c50dcbb0e47e4a4108508a72d7af18acd4a99f4/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f666931612f6c6f672e7376673f7374796c653d666c61742d73717561726526636f6c6f72423d6d656469756d76696f6c6574726564)](https://packagist.org/packages/fi1a/log)[![Support mail](https://camo.githubusercontent.com/116fa0d447870a3a6c6c1f4b296c889707a6e30a69c2b28cbe8d0f6f5c3d4920/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d61696c2d737570706f7274253430666931612e72752d627269676874677265656e)](mailto:support@fi1a.ru)

Данный пакет предоставляет функционал ведения журнала (логирования), используя обработчики. На данный момент доступны обработчики записи в файл, syslog и отправка записей на email адрес. Наличие "каналов" позволяет вести журнал, отправляя записи в разные обработчики с разными настройками. Один канал может содержать множество обработчиков записей журнала. Сообщения журнала могут быть записаны в разные обработчики в зависимости от их серьезности (уровня).

Установка
---------

[](#установка)

Установить этот пакет можно как зависимость, используя Composer.

```
composer require fi1a/log
```

Хелпер
------

[](#хелпер)

В пакете доступен хелпер:

logger(?string $channel = null): ChannelsInterface|LoggerInterface|false;

Он возвращает каналы логгера.

Используя канал логирования `channel1`, записать в лог критическую ошибку:

```
logger('channel1')->critical('Critical error with {{value}}', ['value' => 'message',], ['id' => 1]);
```

Конфигурирование
----------------

[](#конфигурирование)

Конфигурирование канала осуществляется путем добавления экземпляра класса `Fi1a\Log\Logger`, используя метод `addChannel` класса `Fi1a\Log\ChannelsInterface` возвращаемого хелпером `logger` без передачи аргументов.

Обработчики добавляются методом `addHandler` класса `Fi1a\Log\Logger`. В примере добавляются обработчики для записи в файл журнала `Fi1a\Log\Handlers\StreamHandler` записей с уровнем `Fi1a\Log\LevelInterface::ERROR` и отправку на email записей с уровнем `Fi1a\Log\LevelInterface::EMERGENCY` с помощью обработчика `Fi1a\Log\Handlers\MailHandler`.

```
use Fi1a\Log\Handlers\MailHandler;
use Fi1a\Log\Handlers\StreamHandler;
use Fi1a\Log\LevelInterface;
use Fi1a\Log\Logger;

$logger = new Logger('channel1');

$logger->addHandler(new StreamHandler(__DIR__ . '/filelog.log', LevelInterface::ERROR));
$logger->addHandler(new MailHandler('to@fi1a.ru', 'from@fila.ru', LevelInterface::EMERGENCY));

logger()->addChannel($logger);
```

Доступные обработчики
---------------------

[](#доступные-обработчики)

- `Fi1a\Log\Handlers\StreamHandler` - обработчик логирования в файл (поток);
- `Fi1a\Log\Handlers\RotatingFileHandler` - сохраняет логи в файлах с именем по маске времени. Хранится ограниченное кол-во файлов;
- `Fi1a\Log\Handlers\SyslogHandler` - логирование в syslog;
- `Fi1a\Log\Handlers\MailHandler` - отправка логов на почту.

### Fi1a\\Log\\Handlers\\StreamHandler

[](#fi1aloghandlersstreamhandler)

Сохранение записей журнала в файл или поток.

Аргументы конструктораОписаниеstring, resource $streamПуть к файлу или потокint, string, LevelInterface $level = LevelInterface::DEBUGУровень от которого обработчик записывает в журнал?int $permission = nullПрава на файлbool $lock = falseБлокировать файл при записи?FormatterInterface $formatter = nullОбъект форматирования записей журнала```
use Fi1a\Log\Handlers\StreamHandler;

$handler = new StreamHandler(__DIR__ . '/filelog.log', LevelInterface::ERROR);
$logger->addHandler($handler);
```

### Fi1a\\Log\\Handlers\\RotatingFileHandler

[](#fi1aloghandlersrotatingfilehandler)

Сохранение записей журнала в файлах с именем по маске времени. Хранится ограниченное кол-во файлов.

Аргументы конструктораОписаниеstring $filePathAndNameПуть и название файла ведения журналаint $maxFiles = 0Кол-во файлов, которые хранятся. 0 - не ограничено.?string $dateFormat = nullФормат даты и времени в названии файлаint, string, LevelInterface $level = LevelInterface::DEBUGУровень от которого обработчик записывает в журнал?int $permission = nullПрава на файлbool $lock = falseБлокировать файл при записи?FormatterInterface $formatter = nullОбъект форматирования записей журнала```
use Fi1a\Log\Handlers\RotatingFileHandler;

$handler = new RotatingFileHandler(__DIR__ . '/filelog.log', 2, 'Y-m-d', LevelInterface::ERROR);
$logger->addHandler($handler);
```

### Fi1a\\Log\\Handlers\\SyslogHandler

[](#fi1aloghandlerssysloghandler)

Сохранение записей журнала, используя syslog.

Аргументы конструктораОписаниеstring $prefix = ''Строка добавляется к каждому сообщению$facility = LOG\_USERПараметр facility используется для определения типа программыint, string, LevelInterface $level = LevelInterface::DEBUGУровень от которого обработчик записывает в журнал?FormatterInterface $formatter = nullОбъект форматирования записей журналаint $logPid = LOG\_PIDАргумент для указания используемых опций при создании записи журнала```
use Fi1a\Log\Handlers\SyslogHandler;

$handler = new SyslogHandler('error', LOG_USER, LevelInterface::ERROR);
$logger->addHandler($handler);
```

### Fi1a\\Log\\Handlers\\MailHandler

[](#fi1aloghandlersmailhandler)

Отправка записей журнала на почту.

Аргументы конструктораОписаниеstring, array&lt;int, string&gt; $toСписок email адресов получателейstring $fromEmail адрес отправителяint $countInBatch = 0Кол-во отправляемых записей. 0 - не накапливать записи, отправлять по одной?string $subjectFormat = nullФормат заголовка письмаint, string, LevelInterface $level = LevelInterface::DEBUGУровень от которого обработчик записывает в журнал?FormatterInterface $formatter = nullОбъект форматирования записей журнала```
use Fi1a\Log\Handlers\MailHandler;

$handler = new MailHandler('to@fi1a.ru', 'from@fila.ru', LevelInterface::ERROR);
$logger->addHandler($handler);
```

Запись сообщений журнала
------------------------

[](#запись-сообщений-журнала)

Вы можете записывать информацию в журнал с помощью канала возвращаемого хелпером `logger`, который при передаче аргумента с названием канала возвращает его. Средство ведения журнала обеспечивает восемь уровней: emergency, alert, critical, error, warning, notice, info, и debug. Для каждого уровня есть свой метод записи в журнал:

```
$logger = logger('channel1');

$logger->emergency('Log {{value}}', ['value' => 'message'], ['id' => 1]);
$logger->alert('Log {{value}}', ['value' => 'message'], ['id' => 1]);
$logger->critical('Log {{value}}', ['value' => 'message'], ['id' => 1]);
$logger->error('Log {{value}}', ['value' => 'message'], ['id' => 1]);
$logger->warning('Log {{value}}', ['value' => 'message'], ['id' => 1]);
$logger->notice('Log {{value}}', ['value' => 'message'], ['id' => 1]);
$logger->info('Log {{value}}', ['value' => 'message'], ['id' => 1]);
$logger->debug('Log {{value}}', ['value' => 'message'], ['id' => 1]);
```

- `emergency` - система не работает;
- `alert` - ошибка. Необходимо принять меры немедленно.
- `critical` - критическая ошибка;
- `error` - ошибка, которая не требует немедленных действий, но должна быть записана;
- `warning` - предупреждение;
- `notice` - все нормально, но событие значимое;
- `info` - какое-либо событие;
- `debug` - отладочная информация.

Также доступен метод `log` для записи в журнал с передачей уровня логирования в аргументе:

```
$logger = logger('channel1');

$logger->log(LevelInterface::ERROR, 'Log {{value}}', ['value' => 'message'], ['id' => 1]);
```

Контекстная информация
----------------------

[](#контекстная-информация)

Методом `withContext` класса `Fi1a\Log\Logger` (для этого канала), или класса `Fi1a\Log\Channels` (для всех каналов) может быть передан массив контекстных данных, которые будут включены во все последующие записи журнала. Также контекстные данные можно передать третьим аргументом любого из методов записи в журнал, эти контектсные данные будут использованы только к этой записи.

```
// Глобально для всех каналов
logger()->withContext(['pid' => 1]);

// Для конкретного канала
$logger = logger('channel1');
$logger->withContext(['uid' => 2]);

// Для конкретной записи
$logger->error('Log {{value}}', ['value' => 'message'], ['id' => 1]);

/*
14.01.2023 10:18:58
channel1.ERROR[500]
Log message
{"pid":1,"uid":2,"id":1}
 */
```

Форматирование
--------------

[](#форматирование)

Доступны следующие классы для форматирования сообщений журнала:

- `Fi1a\Log\Formatters\TextFormatter` - форматирование записи лога в текст;
- `Fi1a\Log\Formatters\HtmlFormatter` - форматирование записи лога в виде html.

Каждому обработчику можно передать объект форматирование записи журнала в конструктор.

```
use Fi1a\Log\Formatters\HtmlFormatter;
use Fi1a\Log\Handlers\StreamHandler;
use Fi1a\Log\LevelInterface;

$formatter = new HtmlFormatter();

$logger->addHandler(
    new StreamHandler(
        __DIR__ . '/log.html',
        LevelInterface::DEBUG,
        0776,
        false,
        $formatter
    )
);

logger()->addChannel($logger);

$logger->error('Log {{value}}', ['value' => 'message'], ['id' => 1]);
```

###  Health Score

16

—

LowBetter than 5% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity13

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity23

Early-stage or recently created project

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/d4f26c1adaa632741fadf55b1328cbd22ac91282aecfae2027d105df0ddedee4?d=identicon)[fi1a](/maintainers/fi1a)

---

Tags

logloggerphp

### Embed Badge

![Health badge](/badges/fi1a-log/health.svg)

```
[![Health](https://phpackages.com/badges/fi1a-log/health.svg)](https://phpackages.com/packages/fi1a-log)
```

###  Alternatives

[psr/log

Common interface for logging libraries

10.4k1.2B9.2k](/packages/psr-log)[itsgoingd/clockwork

php dev tools in your browser

5.9k27.6M94](/packages/itsgoingd-clockwork)[graylog2/gelf-php

A php implementation to send log-messages to a GELF compatible backend like Graylog2.

41838.2M138](/packages/graylog2-gelf-php)[bugsnag/bugsnag-psr-logger

Official Bugsnag PHP PSR Logger.

32132.5M2](/packages/bugsnag-bugsnag-psr-logger)[consolidation/log

Improved Psr-3 / Psr\\Log logger based on Symfony Console components.

15462.2M7](/packages/consolidation-log)[datadog/php-datadogstatsd

An extremely simple PHP datadogstatsd client

19124.6M15](/packages/datadog-php-datadogstatsd)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
