Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Error Log Bundle Laravel Package

padam87/error-log-bundle

Symfony bundle that captures application errors and exceptions in a Doctrine-backed log and provides a simple admin interface to browse and inspect them, keeping production issues visible without digging through server logs.

View on GitHub
Deep Wiki
Context7

Getting Started

  • Install and pin: composer require padam87/error-log-bundle:^0.2.0. Verify the composer.json of the tag before committing — check the require block for the PHP and framework constraints, because a Bundle-suffixed package is a Symfony convention and the Symfony bridge may not be relevant inside a Laravel app.
  • Read these three things first: the README's install/registration step, the bundle's configuration tree (usually DependencyInjection/Configuration.php), and the event listener/subscriber that actually captures the error. Those three files tell you the entire data flow — everything else is wiring.
  • First use case: capture uncaught exceptions into a queryable store so you can triage production errors without SSH-ing into a box and grepping laravel.log. Wire it to the kernel.exception-equivalent (App\Exceptions\Handler::register() / reportable() in Laravel) rather than replacing your logging stack.
  • Do a smoke test immediately: throw a deliberate exception in a route, confirm a row (or file entry) appears, and confirm nothing sensitive (request body, auth headers, env values) landed in the payload.

Implementation Patterns

  • Bridge it, don't bundle it. If the package ships a Symfony Bundle class, ignore it in Laravel and instantiate the underlying logger/writer service directly from a small service provider. You get the useful core without fighting the container.
  • Hook into reportable() rather than middleware. A global middleware only sees HTTP exceptions; reportable() also catches queued jobs, scheduled commands, and console errors — which is usually where the errors you actually care about live.
  • Fingerprint before you store. Normalize the exception class + first stack frame + route into a hash so 10,000 identical QueryExceptions collapse into one issue with a count, instead of 10,000 rows. This is the single biggest usability lever for any error-log package.
  • Separate storage from transport. Write to your DB synchronously (cheap, reliable) but push alerts (Slack/mail) through a queued job, so a broken alerting endpoint can't cascade into a broken error path.
  • Prune on a schedule. Add the package's table to a model:prune or a scheduled DELETE WHERE created_at < now()->subDays(30) from day one; error tables grow faster than any other table you own.
  • Treat it as the triage layer, not the audit layer. Keep your structured Monolog channels for compliance/forensics; use this package for "what is on fire right now" and link out to the full log entry by request ID.

Gotchas and Tips

  • The v0.2.0 changelog is empty — the release notes are a bare compare link with no described changes. Diff v0.1.1...v0.2.0 yourself before upgrading; on a 0.x package, a "minor" bump can absolutely contain breaking changes.
  • 0.x means no BC promise. Pin the exact version in composer.json and read the diff on every bump; don't let ^0.2 float you into a rewrite.
  • Recursion is the classic failure mode. If the writer itself throws (DB down, disk full, serialization failure on a weird exception payload), you can get an infinite loop or a fatal that masks the original error. Wrap the write in a try/catch and swallow — never let error logging become the error.
  • Sanitize aggressively. Exception messages routinely contain SQL with user data, URLs with tokens, and serialized models. Redact before persisting; the error table is usually read by more people than the main database.
  • Serialize defensively. Not every exception is safely stringable — closures, resources, and large Eloquent graphs will blow up serialize(). Store class, message, file, line, and a trimmed trace rather than the raw object.
  • Extension points worth knowing: the fingerprint/normalizer (if exposed) and the storage writer. If the package lets you swap the writer, do that early — routing to a null writer in local/testing is how you keep test suites fast and CI logs clean.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource
noith/settings