daemon8 / laravel
Laravel integration for Daemon8 -- automatic runtime observation via event watchers
Requires
- php: ^8.4
- daemon8/php: ^0.1
- illuminate/events: ^11.0|^12.0|^13.0
- illuminate/support: ^11.0|^12.0|^13.0
Requires (Dev)
- larastan/larastan: ^3.0
- orchestra/testbench: ^9.0|^10.0|^11.0
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^11.0
- rector/rector: ^2.0
- rector/swiss-knife: ^2.3
- slevomat/coding-standard: ^8.15
- squizlabs/php_codesniffer: ^3.10
Suggests
- laravel/octane: For long-running worker safety. daemon8/laravel is already Octane-compatible via scoped() bindings; no additional configuration is required.
This package is auto-updated.
Last update: 2026-04-26 03:52:08 UTC
README
Auto-instrument Laravel 11+ apps for Daemon8. Requests, queries, jobs, exceptions, cache, mail, and more — captured automatically.
Tip
Help keep Daemon8 open source — star the main repo.
Install
composer require daemon8/laravel
php artisan vendor:publish --tag=daemon8-config
daemon8 install # if you haven't already
Requires the Daemon8 daemon running locally. Without it, the package is a silent no-op.
Usage
Everything streams automatically after install. Emit manually when needed:
use Daemon8\Laravel\Facades\Daemon8; Daemon8::log('checkout completed', severity: 'info'); Daemon8::warn('payment retry threshold reached'); Daemon8::exception($e);
Or inject Daemon8Client for testable code:
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); } }
Configuration
DAEMON8_ENABLED=true DAEMON8_URL=http://127.0.0.1:9077/ingest DAEMON8_APP=checkout-api DAEMON8_TIMEOUT_MS=50
Per-watcher toggles in config/daemon8.php:
DAEMON8_WATCH_REQUEST=true DAEMON8_WATCH_QUERY=true DAEMON8_WATCH_JOBS=true DAEMON8_WATCH_CACHE=false
See config/daemon8.php for the full watcher list, slow-query thresholds, and sensitive data rules.
Respondents
React to observations in real time. A respondent is a class with full container access:
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 { SlowQuery::create([ 'sql' => $observation->data['sql'] ?? '', 'duration_ms' => $observation->data['duration_ms'] ?? 0, ]); } }
Register in config/daemon8.php, then run php artisan daemon8:run.
Requirements
- PHP 8.4+
- Laravel 11 / 12 / 13
- Daemon8 daemon running locally
Development
composer install
composer check # phpstan + rector dry-run + phpcs + phpunit
Links
License
MIT. See LICENSE.