PHPackages                             karelwintersky/arris.logger - 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. karelwintersky/arris.logger

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

karelwintersky/arris.logger
===========================

Arris µFramework - AppLogger class

2.1.0(1y ago)06501[3 issues](https://github.com/ArrisFramework/Arris.AppLogger/issues)1MITPHPPHP 8.\*

Since Jun 24Pushed 11mo ago1 watchersCompare

[ Source](https://github.com/ArrisFramework/Arris.AppLogger)[ Packagist](https://packagist.org/packages/karelwintersky/arris.logger)[ RSS](/packages/karelwintersky-arrislogger/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (1)Versions (14)Used By (1)

Init
====

[](#init)

Инициализирует класс логгера:

```
AppLogger::init($application, $instance, $options = []):void
```

- `$application` - Имя приложения
- `$instance` - код инстанса приложения (рекомендуется генерировать его при старте приложения и с помощью этого кода отличать логи, записанные разными инстансами приложения параллельно)
- `$options` опции приложения:
    - `bubbling` - \[FALSE\] - всплывает ли логгируемое сообщение?
    - `default_log_level` - `[Monolog::DEBUG]` - уровень логгирования по умолчанию
    - `default_logfile_path` - `''` - путь к файлам логов по умолчанию
    - `default_logfile_prefix` - `''` - префикс файла лога по умолчанию
    - `default_log_file` - `'_.log'` - имя файла лога по умолчанию, применяется если для имени файла передан NULL
    - `default_handler` - или хэндлер, реализующий \\Monolog\\Handler\\HandlerInterface как логгер по умолчанию для этого скоупа
    - `add_scope_to_log` - \[FALSE\] - добавлять ли имя скоупа к имени логгера в файле лога?
    - `deferred_scope_creation` - \[TRUE\] - разрешать ли отложенную инициализацию скоупов
    - `deferred_scope_separate_files` - \[TRUE\] - использовать ли разные файлы для deferred-скоупов (на основе имени скоупа)

Add Scope (multiply levels)
===========================

[](#add-scope-multiply-levels)

```
AppLogger::addScope($scope = null, $scope_levels = [], $scope_logging_enabled = true, $is_deferred_scope = false):void
```

Добавляет скоуп (логгер) с параметрами

- `$scope` - имя скоупа
- `$scope_levels` - массив кортежей с опциями уровней логгирования.
- `$scope_logging_enabled` - включено ли логгирование для этого скоупа. Это глобальная настройка для скоупа, если логгирование отключено - никакие опции, переданные в `$scope_levels` его не включат. Если этим параметром логгирование отключено (false), но скоуп создается, но для всех уровней логгирования хэндлер ставится `NullLogger`.
- `$is_deferred_scope` - служебный аргумент, его никогда не следует указывать напрямую (он задает создание логгера как deferred)

Настройки логгеров по уровням (логгирования) передаются в массиве `$scope_levels`. Может быть передан пустой массив - тогда поставятся опции "по умолчанию" (на основе глобальных опций), а скоуп будет создан как 'deferred' (отложенная инициализация).

Пример:

```
AppLogger::addScope('mysql',
[
    [ '__mysql.100-debug.log', Logger::DEBUG, 'enable' => true],
    [ '__mysql.250-notice.log', Logger::NOTICE,  'enable' => true],
    [ '__mysql.300-warning.log', Logger::WARNING,  'enable' => true],
    [ '__mysql.400-error.log', Logger::ERROR,  'enable' => true],
], getenv('IS_MYSQL_LOGGER_ENABLED'));
```

Параметры уровня логгирования (элементы кортежа опций):

- Первый элемент: `filename` - имя файла (в случае отсутствия будет применено имя по умолчанию из глобальных опций)
- Второй элемент:`logging_level` - уровень логгирования, используются числа или (что удобнее), константы `\Monolog\Logger::DEBUG` и другие из того же неймспейса.

Остальные параметры передаются через ключи ассоциативного массива:

- `enable` - \[TRUE\], разрешен ли этот уровень логгирования. Применяется тот же механизм, что и для глобальной опции `$scope_logging_enabled` для скоупа;
- `bubbling` - \[FALSE\], всплывает ли сообщение логгирования на следующий (более низкий) уровень?
- `handler` - \[NULL\] либо хэндлер, реализующий интерфейс `Monolog\Handler\HandlerInterface`. Если указан NULL - будет использован хэндлер по умолчанию: StreamHandler, записывающий лог в файл.

*NB:* Следует отметить, что если используется необъявленный в скоупе логгер, например:

```
AppLogger::scope('mysql')->emergency('MYSQL EMERGENCY');
```

Monolog проспамит этим сообщением по всем объявленным уровням.

Scope
=====

[](#scope)

Вызов `AppLogger::scope($scope_name)` возвращает инстанс `\Monolog\Logger`, к которому можно применить штатные методы логгирования:

```
debug, notice, warn, error, emergency и так далее

```

Пример:

```
AppLogger::scope('mysql')->debug("mysql::Debug", [ ['x'], ['y']]);
AppLogger::scope('mysql')->notice('mysql::Notice', ['x', 'y']);
```

Deferred Scope
==============

[](#deferred-scope)

Есть возможность использовать скоупы с отложенной инициализацией и параметрами по умолчанию. Этот механизм называется Deferred Scope.

Вызов аналогичен предварительно инициализированному логгеру:

```
AppLogger::scope('usage')->emergency('EMERGENCY USAGE');
```

В этом случае будет создан скоуп `usage` со всеми уровнями логгирования и параметрами по умолчанию (но реальный вызов логгера произойдет только для уровня `emergency`).

*NB:* Если при инициализации обычного скоупа методом `addScope()` передан пустой массив опций логгеров - будет применен механизм инициализации deferred-скоупа.

Hints
=====

[](#hints)

Один файл для нескольких уровней логгирования
---------------------------------------------

[](#один-файл-для-нескольких-уровней-логгирования)

Указываем наименьший используемый уровень логгирования (`Logger::NOTICE`)

```
AppLogger::addScope('log.selectel', [
    [ '_selectel_upload.log', Logger::NOTICE ]
]);
```

Теперь вот эти два вызова запишут в файл 2 строчки

```
AppLogger::scope('log.selectel')->error('Error');
AppLogger::scope('log.selectel')->notice('Notice');
```

Custom handler - хэндлер, отличный от стандартного StreamHandler
================================================================

[](#custom-handler---хэндлер-отличный-от-стандартного-streamhandler)

Дефолтное определение хэндлера, выводящего данные в stdout, таково:

```
AppLogger::addScope('console', [
        [ 'php://stdout', Logger::INFO, [ 'handler' => StreamHandler::class ]]
    ], $options['verbose']);
```

Добавляем кастомный форматтер и хэндлер логгирования:

```
  AppLogger::addScope('console', [
        [ 'php://stdout', Logger::INFO, [ 'handler' => static function()
          {
              $formatter = new \Arris\AppLogger\LineFormatterColored("[%datetime%]: %message%\n", "Y-m-d H:i:s", false, true);
              $handler = new StreamHandler('php://stdout', Logger::INFO);
              $handler->setFormatter($formatter);
              return $handler;
          }
    ], $options['verbose']);
```

Смотри:

или, для PHP8+

```
AppLogger::addScopeLevel(
    scope: 'console',
    target: 'php://stdout',
    log_level: Logger::INFO,
    enable: $options['verbose'],
    handler: static function()
    {
        $formatter = new \Arris\AppLogger\LineFormatterColored("[%datetime%]: %message%\n", "Y-m-d H:i:s", false, true);
        $handler = new \Arris\AppLogger\Monolog\Handler\StreamHandler('php://stdout', Logger::INFO);
        $handler->setFormatter($formatter);
        return $handler;
    }
);
```

addScopeLevel()
===============

[](#addscopelevel)

Метод используется для описания конкретного уровня логгирования и логгера. Рекомендуется использовать в PHP8+:

"Обычное" логгирование в файл:
------------------------------

[](#обычное-логгирование-в-файл)

```
AppLogger::addScopeLevel('xxx', 'info.log', Logger::INFO); // Handler не указан, что означает, по умолчанию, StreamHandler
AppLogger::scope('xxx')->info('Message XXX');
```

Передача хэндлера коллбэком
---------------------------

[](#передача-хэндлера-коллбэком)

```
AppLogger::addScopeLevel('syslog', 'syslog', Logger::DEBUG, handler: function (){
    return new SyslogHandler(AppLogger::$application, LOG_USER, Logger::DEBUG, false);
});

AppLogger::addScopeLevel('syslog', 'syslog', Logger::INFO, handler: function (){
    return new SyslogHandler(AppLogger::$application, LOG_USER, Logger::INFO, false);
});

AppLogger::scope('syslog')->debug('Debug message from AppLogger');
AppLogger::scope('syslog')->info('Info message from AppLogger');
```

Так мы задаем кастомный хэндлер через коллбэк, указывая для него особые параметры.

Передача хэндлера строкой
-------------------------

[](#передача-хэндлера-строкой)

Не рекомендуется, поскольку конструктор хэндлера принимает дефолтные значения (за исключением `bubble: false`)

```
AppLogger::addScopeLevel('syslog', 'syslog', Logger::INFO, handler: SyslogHandler::class);
```

###  Health Score

37

—

LowBetter than 83% of packages

Maintenance47

Moderate activity, may be stable

Popularity17

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity62

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

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.

###  Release Activity

Cadence

Every ~141 days

Recently: every ~5 days

Total

13

Last Release

455d ago

Major Versions

0.9.1 → 1.0.02023-08-07

1.101.0 → 2.0.02025-01-21

PHP version history (4 changes)0.9PHP &gt;=7.4

1.2.0PHP ^7.4 || 8.\*

1.101.0PHP ^7.4

2.0.0PHP 8.\*

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/2164874?v=4)[Karel Wintersky](/maintainers/KarelWintersky)[@KarelWintersky](https://github.com/KarelWintersky)

---

Top Contributors

[![KarelWintersky](https://avatars.githubusercontent.com/u/2164874?v=4)](https://github.com/KarelWintersky "KarelWintersky (6 commits)")

### Embed Badge

![Health badge](/badges/karelwintersky-arrislogger/health.svg)

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

###  Alternatives

[sentry/sentry

PHP SDK for Sentry (http://sentry.io)

1.9k227.1M273](/packages/sentry-sentry)[rollbar/rollbar

Monitors errors and exceptions and reports them to Rollbar

33723.7M82](/packages/rollbar-rollbar)[illuminate/log

The Illuminate Log package.

6224.3M518](/packages/illuminate-log)[open-telemetry/sdk

SDK for OpenTelemetry PHP.

2222.9M248](/packages/open-telemetry-sdk)[open-telemetry/api

API for OpenTelemetry PHP.

1833.0M214](/packages/open-telemetry-api)[pagemachine/typo3-formlog

Form log for TYPO3

23225.3k6](/packages/pagemachine-typo3-formlog)

PHPackages © 2026

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