i22/airbrake-bundle
Symfony bundle that integrates Airbrake error monitoring, automatically capturing exceptions and reporting them to your Airbrake project. Provides simple configuration and service integration for tracking production errors in Symfony applications.
Framing mismatch is the first finding. The request describes a "Laravel/PHP package," but i22/airbrake-bundle is a Symfony bundle. That distinction is not pedantry — it determines whether there is anything here to adopt at all. A Symfony bundle's entire contribution is a Bundle subclass, a DependencyInjection/Extension that hydrates a service container from a config tree, and compiler passes registering an Airbrake client and (typically) a Monolog handler. Laravel has no bundle, extension, or compiler-pass concept; its analogues are service providers, config/*.php arrays, and the Monolog LogManager channel stack. None of the package's actual value-add transfers to Laravel. What transfers is the wrapped notifier (airbrake/airbrake-php / phpbrake), which is an ordinary Composer library and can be wired into a Laravel service provider in about a day.
Architecture fit — poor as a dependency, adequate as a specification. Treat this repository as documentation of how to wire Airbrake into a Symfony-style framework, not as an installable artifact. On Laravel it is out of scope by construction.
Integration feasibility — feasible only as a reference implementation. The realistic path is to read the bundle's config keys and handler wiring and reproduce ~150 lines of it as a Laravel service provider plus a custom Monolog handler. Installing the bundle itself into a modern Laravel app is not viable.
Technical risk — high, and dominated by project-health and vendor signals rather than code quality.
symfony/* and PHP constraints. Composer will almost certainly refuse to install it alongside a modern Laravel (Symfony 6/7 components, PHP 8.2+), and there will be no upstream fix.Key questions for the team:
Stack fit. Assume Laravel 10/11 on PHP 8.2+. The bundle is a non-starter. The viable target is airbrake/airbrake-php (or airbrake/phpbrake) behind a Laravel service provider. Note that phpbrake depends on Guzzle — check the Guzzle major version against everything else in the app (AWS SDK, Stripe, social auth). Guzzle 6/7 splits are the single most common dependency conflict in Laravel estates.
Migration path — three options, in preference order:
Airbrake\Notifier in an AirbrakeServiceProvider, add a custom Monolog handler on the error/critical channels, and hook Exceptions\Handler::report() for uncaught exceptions. No bundle dependency. ~1–2 engineer-days including tests.sentry/sentry-laravel, which is first-party, actively maintained, and installs with one command. On total cost of ownership this will very likely win.Compatibility. Verify PHP constraint, symfony/* component versions, Guzzle major, and Monolog 2 vs 3 (HandlerInterface signature changed). If some service in the estate sits on Symfony 4.4 or below the bundle might install there — but that does nothing for the Laravel app that motivated the request.
Sequencing.
Handler::report(); add a feature test asserting a thrown exception produces exactly one report.Maintenance. Zero upstream. If we adopt either the bundle or a thin wrapper, we are the maintainers. Budget a recurring ~2–4 hours per quarter for dependency bumps and notifier drift, plus the real cost: when a new PHP or Laravel major lands, someone must verify the notifier still runs. A first-party SDK makes that check free.
Support. No vendor SLA on the bundle, no maintainer responsiveness expectation, no security advisory channel we are subscribed to. Airbrake support covers the service, not this integration. The escalation path for "errors aren't showing up" is entirely internal — a bad place to be, given that error reporting fails silently by design.
Scaling. Two pressure points. First, the notifier posts synchronously by default; at high request volume a slow Airbrake endpoint adds tail latency and can cascade into worker exhaustion under PHP-FPM. Mitigate with queue-backed async reporting or the notifier's async/curl settings, and set an aggressive connect timeout (sub-second). Second, quota burn: a retry loop or one noisy exception can exhaust the monthly quota in minutes, at which point reporting stops and we are blind during precisely the incident we need visibility into. Enable sampling, de-duplication, and a hard rate limit before production rollout.
Failure modes to design for:
try/catch around all reporting.Ramp-up. Low for any PHP developer — the API is notify($exception). The real ramp-up is organizational: teaching the team to triage in Airbrake rather than tailing storage/logs/laravel.log, defining what constitutes an alert versus a trend, and assigning ownership of the dashboard. That is a 2–4 week adoption curve regardless of SDK, and it argues for choosing the SDK with the better onboarding documentation — which is not this one.
TPM recommendation. Do not adopt i22/airbrake-bundle as a dependency. It is a Symfony-only, unmaintained, zero-adoption artifact that cannot install into a modern Laravel application and whose value-add does not port. Use it at most as documentation for wiring the underlying notifier into a service provider. More importantly, force the vendor decision to the surface before spending engineering time: the adapter is commodity and the vendor contract is the product decision. If Airbrake is not already contracted, a first-party Sentry integration will be cheaper to build, cheaper to run, and materially lower-risk — and if we are moving off Airbrake, this repository usefully confirms the coupling surface is roughly a handler plus two config keys, which makes leaving a one-to-two-day swap rather than a strategic lock-in.
How can I help you explore Laravel packages today?