daemon8 / symfony
Symfony integration for Daemon8 -- automatic runtime observation via event subscribers
Requires
- php: ^8.4
- daemon8/php: ^0.1
- symfony/config: ^6.4|^7.0
- symfony/dependency-injection: ^6.4|^7.0
- symfony/event-dispatcher: ^6.4|^7.0
- symfony/http-kernel: ^6.4|^7.0
Requires (Dev)
- doctrine/dbal: ^4.2
- doctrine/doctrine-bundle: ^2.13
- doctrine/migrations: ^3.8
- doctrine/orm: ^3.3
- matthiasnoback/symfony-dependency-injection-test: ^6.0
- monolog/monolog: ^3.0
- phpstan/phpstan: ^2.0
- phpstan/phpstan-symfony: ^2.0
- phpunit/phpunit: ^11.0
- rector/rector: ^2.0
- slevomat/coding-standard: ^8.15
- squizlabs/php_codesniffer: ^3.10
- symfony/browser-kit: ^6.4|^7.0
- symfony/console: ^6.4|^7.0
- symfony/framework-bundle: ^6.4|^7.0
- symfony/http-client: ^6.4|^7.0
- symfony/mailer: ^6.4|^7.0
- symfony/messenger: ^6.4|^7.0
- symfony/monolog-bundle: ^3.10
- symfony/security-bundle: ^6.4|^7.0
Suggests
- doctrine/doctrine-bundle: Enables DoctrineQueryMiddleware, transaction observation, and ORM model listeners.
- doctrine/migrations: Enables migration event observation via DoctrineMigrationSubscriber.
- doctrine/orm: Enables Doctrine ORM model listeners (postPersist / postUpdate / postRemove).
- symfony/http-client: Enables the Daemon8 HttpClient decorator for outbound request tracing.
- symfony/mailer: Enables MailerSubscriber (MessageEvent / SentMessageEvent / FailedMessageEvent).
- symfony/messenger: Enables MessengerSubscriber (worker + transport lifecycle events).
- symfony/monolog-bundle: Enables the Daemon8 Monolog handler for log observation.
- symfony/security-bundle: Enables SecuritySubscriber (login success / failure / logout / switch user).
This package is auto-updated.
Last update: 2026-04-26 03:52:08 UTC
README
Auto-instrument Symfony 6.4 LTS / 7.x apps for Daemon8. Requests, Doctrine queries, exceptions, Messenger, HTTP client, security events, and Monolog — captured automatically.
Tip
Help keep Daemon8 open source — star the main repo.
Install
composer require daemon8/symfony
daemon8 install # if you haven't already
Symfony Flex publishes config/packages/daemon8.yaml and registers the bundle. No Flex? Add Daemon8\Symfony\Daemon8Bundle::class => ['all' => true] to config/bundles.php.
Requires the Daemon8 daemon running locally. Without it, the bundle is a silent no-op.
Usage
Everything streams automatically after install. Emit manually by injecting Daemon8Client:
use Daemon8\Daemon8Client; final class CheckoutService { public function __construct(private readonly Daemon8Client $daemon8) {} public function process(Order $order): void { $this->daemon8->log('processing order #' . $order->id); $this->daemon8->send( ['event' => 'checkout', 'order_id' => $order->id], severity: 'info', channel: 'orders', ); } }
In dev mode, the WebProfiler toolbar shows a Daemon8 panel with every observation from the current request.
Configuration
DAEMON8_ENABLED=true DAEMON8_URL=http://127.0.0.1:9077/ingest DAEMON8_APP=checkout-api DAEMON8_TIMEOUT_MS=50
Per-subscriber toggles in config/packages/daemon8.yaml. Soft deps (Doctrine, Messenger, Mailer, etc.) are auto-detected — removing a package never crashes the bundle.
Respondents
React to observations in real time. Any service implementing Respondent is auto-tagged:
use Daemon8\Contracts\Respondent; use Daemon8\Filter; use Daemon8\Observation; use Daemon8\Severity; final class SlowQueryAnalyst implements Respondent { public function interest(): Filter { return new Filter(kinds: ['query'], severityMin: Severity::Warn); } public function respond(Observation $observation): void { // Full container access — Entity Manager, mailer, logger, anything. } }
Run the subscriber: bin/console daemon8:run
Requirements
- PHP 8.4+
- Symfony 6.4 LTS or 7.x
- Daemon8 daemon running locally
Development
composer install
composer check # phpstan + rector dry-run + phpcs + phpunit
Links
License
MIT. See LICENSE.