php-bug-catcher/reporter-bundle
A Symfony bundle for php-bug-catcher that wires up automatic exception and error reporting, capturing detailed bug reports and sending them to your configured reporter so you can find and fix issues faster.
Architecture fit
reporter-bundle is a client-side Laravel/PHP reporter: it hooks Laravel's exception handling (WriteStackTraceListener) and Monolog (BugCatcherMonologHandler) and ships serialize(Codeframe[]) payloads to a separate Bug Catcher server. Treat it as two products with one contract — the client package and the server (php-bug-catcher/bug-catcher) — and plan versioning accordingly.serialize() wire format is the main architectural smell for a TPM to flag: it works only because both ends are PHP, and it forecloses non-PHP consumers, log-pipeline inspection, and easy payload diffing in transit. Not a blocker for a PHP-only estate; a blocker if you ever want to route reports through anything else.Integration feasibility
stack_trace already defaulted to true. Upgrade is a composer update and a deploy.Caused by: labels. The release degrades gracefully without it — extra frames appear, label absent — so the client upgrade need not be gated on the server team. That is good release engineering and low coordination cost.Technical risk
(NNNN): sequence (e.g. SQLSTATE codes) because of a greedy regex. Engineers reading these traces were being pointed at the wrong line with no visible signal that anything was wrong. Silent wrongness in an error tool is worse than a visible failure.getPrevious() is a genuine capability addition, not just a fix — chained/causal exceptions are now visible, which directly improves root-cause time on layered failures (DB → repository → service). It also increases payload size and the volume of exception message text leaving the process, which has PII and quota implications.Key questions
composer.json, and what is the fleet rollout mechanism?ThrowSiteStacktrace throw when source is unreadable, and is it wrapped defensively?unserialize on the receiving end)?previous chain?Stack fit
Migration path
composer update to 2.1.1 and deploy. No config migration, no data migration, no service registration changes.Compatibility
serialize(Codeframe[])), so old servers accept new clients.Caused by: labels. Degradation is cosmetic, which is the right design.Sequencing
Caused by: frames appear.Maintenance
Support
Scaling
Failure modes
previous chain → sensitive strings from nested exceptions leaving the process.Ramp-up
How can I help you explore Laravel packages today?