PHPackages                             cyrtolat/spiral-runtime-diagnostics - 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. cyrtolat/spiral-runtime-diagnostics

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

cyrtolat/spiral-runtime-diagnostics
===================================

Runtime diagnostics for Spiral Framework: call logging without redeploying or restarting RoadRunner.

v0.1.2(2mo ago)03MITPHPPHP ^8.1

Since Jan 27Pushed 2mo agoCompare

[ Source](https://github.com/cyrtolat/spiral-runtime-diagnostics)[ Packagist](https://packagist.org/packages/cyrtolat/spiral-runtime-diagnostics)[ Docs](https://github.com/cyrtolat/spiral-runtime-diagnostics)[ RSS](/packages/cyrtolat-spiral-runtime-diagnostics/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (12)Versions (4)Used By (0)

cyrtolat/spiral-runtime-diagnostics
===================================

[](#cyrtolatspiral-runtime-diagnostics)

- [Описание](#%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5)
    - [Ключевая идея](#%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B2%D0%B0%D1%8F-%D0%B8%D0%B4%D0%B5%D1%8F)
    - [Как это работает](#%D0%BA%D0%B0%D0%BA-%D1%8D%D1%82%D0%BE-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82)
- [Установка и конфигурация](#%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B8-%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D1%8F)
    - [Конфигурация](#%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D1%8F)
- [Подключение к Spiral](#%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA-spiral)
    - [1) Подключение Bootloader](#1-%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-bootloader)
    - [2) Подключение Interceptor](#2-%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-interceptor)
    - [3) Канал логирования](#3-%D0%BA%D0%B0%D0%BD%D0%B0%D0%BB-%D0%BB%D0%BE%D0%B3%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
- [Использование](#%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
    - [Команды](#%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B)
    - [Формат лог-события](#%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82-%D0%BB%D0%BE%D0%B3-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F)
    - [Практические заметки](#%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5-%D0%B7%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8)

Описание
--------

[](#описание)

Библиотека runtime-диагностики для Spiral Framework: временно запускает логирование вызовов **в рантайме**, без деплоя и без перезапуска RoadRunner-воркеров.

### Ключевая идея

[](#ключевая-идея)

Пакет даёт **interceptor**, совместимый с механизмом interception в Spiral: его можно встроить в ваш **pipeline** (который вы настраиваете сами в приложении), чтобы получать «первый срез» по последующим вызовам. Включив диагностику на живой системе, вы без деплоя и без перезапуска **RoadRunner** быстро соберёте поверхностные сигналы (что именно и как долго выполнялось, где чаще падает, где всплески по времени/памяти) и локализуете проблемные кейсы. На этом роль пакета заканчивается: он помогает найти направление, а детальную причину уже нужно разбирать внутри конкретного кода/обработчиков.

### Как это работает

[](#как-это-работает)

Управление диагностикой выполняется через консольные команды. Они не «общаются» с воркерами напрямую, а создают и удаляют специальный временный файл — **runfile**. В этом файле хранится состояние запущенной диагностики и её параметры (например, включено ли логирование и как долго оно должно работать). Поскольку runfile лежит на сервере в общей для приложения файловой системе, его видят все RoadRunner-воркеры: переключение режима применяется сразу ко всем процессам, а не к одному конкретному воркеру.

---

Установка и конфигурация
------------------------

[](#установка-и-конфигурация)

Пакет устанавливается через Composer:

```
composer require cyrtolat/spiral-runtime-diagnostics
```

### Конфигурация

[](#конфигурация)

Пакет использует секцию конфигурации diagnostics. Рекомендуемый способ настройки — опубликовать файл конфигурации в приложение и отредактировать его под своё окружение:

```
php app.php diag:publish --write
```

Полезные флаги:

- `--path=...` (по умолчанию `@config/diagnostics.php`)
- `--force` / `--overwrite` — перезаписать существующий файл

Если конфиг не опубликован, пакет всё равно будет работать: bootloader подставит значения по умолчанию из stubs/diagnostics.php.

> Команда `php app.php diag:config` выводит актуальные (эффективные) значения конфигурации `diagnostics` — с учётом опубликованного файла и переменных окружения.

Пример config/diagnostics.php:

```
return [
    // TTL по умолчанию для запуска диагностики (например: 30s, 5m, 1h, 2d, forever)
    'duration' => env('DIAGNOSTICS_DURATION', '1h'),

    // Путь к runfile (должен быть общим для CLI и воркеров: одна ФС/volume)
    // Рекомендуется делать путь уникальным для приложения/окружения.
    'runfile_path' => sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'diagnostics.json',

    // Канал логирования. Транспорт/handler настраивается в хост-приложении.
    'log_channel' => env('DIAGNOSTICS_LOG_CHANNEL', 'diagnostics'),

    // Ключ атрибута, по которому в контексте вызова хранится исходный callable.
    'callable_attribute' => 'callable',
];
```

Переменные окружения (если используешь stub как есть):

- `DIAGNOSTICS_DURATION` — значение по умолчанию для `diagnostics.duration`
- `DIAGNOSTICS_LOG_CHANNEL` — значение по умолчанию для `diagnostics.log_channel`

> Параметр `runfile_path` — это общий «переключатель» для всех воркеров, поэтому путь должен быть уникальным для приложения/окружения и доступным одновременно и CLI, и воркерам (общая файловая система/volume).

---

Подключение к Spiral
--------------------

[](#подключение-к-spiral)

Для работы пакета требуется три шага интеграции: подключение bootloader (регистрация команд и DI-зависимостей), добавление interceptor в pipeline приложения (желательно первым), и настройка канала логирования, куда будут попадать диагностические события.

### 1) Подключение Bootloader

[](#1-подключение-bootloader)

Точка входа пакета в Spiral-приложение - это класс `Cyrtolat\SpiralRuntimeDiagnostics\DiagnosticsBootloader::class`. Его следует указать в Kernel (в список bootloaders): после этого появляются консольные команды `php app.php diag:*` и регистрируются DI-зависимости, необходимые для корректной работы пакета.

> **Важно:** `DiagnosticsBootloader` не “включает” диагностику и не встраивает interceptor в pipeline. Он только регистрирует команды и биндинги.

### 2) Подключение Interceptor

[](#2-подключение-interceptor)

Основное звено пакета — `Cyrtolat\SpiralRuntimeDiagnostics\DiagnosticsInterceptor::class`. Его необходимо добавить в общий pipeline interceptor-ов вашего приложения — где именно это настраивается, зависит от структуры проекта

> **Важно:** `DiagnosticsInterceptor` должен применяться глобально, чтобы диагностика работала для всех перехватываемых вызовов.

Рекомендуемое размещение — первым в цепочке: так interceptor видит вызовы максимально “снаружи” и не теряет контекст из-за ранних выходов или обработки другими interceptor-ами.

### 3) Канал логирования

[](#3-канал-логирования)

Пакет пишет диагностические события в лог через `Psr\Log\LoggerInterface` и использует канал из `diagnostics.log_channel`. При этом он не настраивает «куда именно» писать логи (handlers/transport/ротацию): это зона ответственности хост-приложения.

На практике это означает, что для выбранного канала в приложении должна быть настроена доставка логов в нужное место (отдельный файл, stdout, централизованный сборщик и т.п.). Иначе диагностика формально будет работать, но записи могут смешаться с общими логами, быть отфильтрованы уровнем или вообще не попасть никуда.

---

Использование
-------------

[](#использование)

Диагностика управляется консольными командами diag:\*: они включают режим на заданное время, показывают статус и позволяют остановить его вручную. Команды не требуют деплоя и не зависят от перезапуска воркеров — режим применяется ко всем процессам через общий runfile.

### Команды

[](#команды)

- `php app.php diag:config` — текущие (эффективные) значения конфигурации
- `php app.php diag:info` — краткая справка по режиму и применению
- `php app.php diag:publish` — публикация шаблона конфигурации
- `php app.php diag:start` — запуск диагностики
- `php app.php diag:status` — текущий статус режима по runfile
- `php app.php diag:stop` — остановка режима (удаление runfile, идемпотентно)

> Команда `diag:start` принимает необязательный параметр `--duration`. Значение задаётся в человекочитаемом формате TTL, например `30s`, `5m`, `1h`, `2d` или `forever`. Если параметр не указан, используется значение по-умолчанию.

### Формат лог-события

[](#формат-лог-события)

Пакет пишет одну запись на перехваченный вызов.

Message: `diagnostics.action`

Context (payload):

- `action` (string) — идентификатор действия/вызова, который логируется
- `duration_ms` (int) — длительность выполнения в миллисекундах
- `ok` (bool) — признак успеха выполнения (`true` — успешно, `false` — ошибка/исключение)
- `memory_usage_bytes` (int) — потребление памяти на момент завершения (в байтах)
- `memory_peak_bytes` (int) — пиковое потребление памяти за время выполнения (в байтах)
- `memory_usage` (string) — `memory_usage_bytes` в человекочитаемом виде
- `memory_peak` (string) — `memory_peak_bytes` в человекочитаемом виде

> **Важно:** пакет не настраивает транспорт логов (handlers/файлы/ротацию) и не решает, куда именно попадёт запись. Он лишь пишет событие в канал diagnostics.log\_channel; настройка вывода — ответственность хост-приложения.

### Практические заметки

[](#практические-заметки)

- Режим предназначен для кратковременного включения: объём логов может быть большим.
- При использовании forever диагностика не завершится сама — её нужно остановить вручную командой diag:stop.
- По истечении TTL логирование прекращается автоматически, даже если runfile остался на диске.
- Доступ к запуску diag:\* команд должен быть ограничен доверенными пользователями/ролями.

###  Health Score

35

—

LowBetter than 79% of packages

Maintenance91

Actively maintained with recent releases

Popularity3

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity34

Early-stage or recently created project

 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 ~14 days

Total

3

Last Release

73d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/35e108d69331c7e31cc35527754e35d5df12a6d7863c09a1e13ccf0a530bb323?d=identicon)[cyrtolat](/maintainers/cyrtolat)

---

Top Contributors

[![cyrtolat](https://avatars.githubusercontent.com/u/70537244?v=4)](https://github.com/cyrtolat "cyrtolat (8 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/cyrtolat-spiral-runtime-diagnostics/health.svg)

```
[![Health](https://phpackages.com/badges/cyrtolat-spiral-runtime-diagnostics/health.svg)](https://phpackages.com/packages/cyrtolat-spiral-runtime-diagnostics)
```

###  Alternatives

[laravel/framework

The Laravel Framework.

34.6k509.9M16.9k](/packages/laravel-framework)[nelmio/api-doc-bundle

Generates documentation for your REST API from attributes

2.3k63.6M232](/packages/nelmio-api-doc-bundle)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M152](/packages/sulu-sulu)[drupal/core-recommended

Locked core dependencies; require this project INSTEAD OF drupal/core.

6939.5M340](/packages/drupal-core-recommended)[kimai/kimai

Kimai - Time Tracking

4.6k7.4k1](/packages/kimai-kimai)[contao/core-bundle

Contao Open Source CMS

1231.6M2.3k](/packages/contao-core-bundle)

PHPackages © 2026

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