onamfc/laravel-devlogger
Laravel DevLogger stores application logs in the database with automatic exception catching, tagging, queue and request/user context, advanced filtering, and configurable retention cleanup. Easily configurable via environment variables.
status (open/closed), tags, updated_by, user_id, queue, request_url. This is not just a log sink; it is a work-queue data model. It directly supports a roadmap decision like "should support/ops triage production errors inside our own admin panel instead of a third-party dashboard?" That is the decision this package most uniquely enables.onQueue() association plus request context makes it cheap to answer "did the nightly report job fail, for which user, on which queue?" — useful for deciding whether a feature is safe to ship to all tenants or needs a rollout flag.retention_days (default 30) forces an explicit answer to "how long do we keep request payloads and IP addresses?" — a GDPR/PII stance you must document. Auto-catch stores request input and ip_address/user_agent, so adopting this package is a data-protection decision, not a neutral logging tweak.DeveloperLog::level('error')->open()), tags, and two artisan commands. There is no dashboard, no list view, no detail screen. Any product value beyond raw capture is our build. Budget an admin panel (e.g., a Filament resource or 3–5 screens) before promising anyone a triage workflow.DEVLOGGER_DB_CONNECTION? For a low-traffic SaaS or internal tool this is fine; it is a roadmap constraint for anything expecting sustained high error volume.Consider it when most of the following are true:
DeveloperLog is genuinely hours of work, not weeks.users/orders tables, and that joinability matters more to you than a polished third-party UI.Look elsewhere when any of these are true:
longtext. Without a dedicated connection and an honest retention policy, you are risking the availability of the same database that serves customers — the failure mode is self-inflicted and embarrassing.Schema::connection() signature, PHP 8.3 nullable deprecation), and v1.1.11 fixes a bug where devlogger:cleanup reported deletions but only soft-deleted rows, so retention silently never worked. Any team that had been running it was carrying a growing table with a false sense of compliance. That is the expected class of risk on a young package: correct in the happy path, thin on longevity edge cases.request()->except(['password','password_confirmation','_token']) — every other field in a POST body lands in a JSON column. In a payment, health, or KYC context, that is likely a non-starter without a code change.Adoption checklist before committing: set DEVLOGGER_DB_CONNECTION to a separate database (not a separate server — same server still shares connection-pool pressure), set retention_days deliberately, verify the actual row count on the table after your first devlogger:cleanup run rather than reading the command's output, restrict the log-viewing admin resource behind authorization, and add a nightly monitor that alerts if log rows grow monotonically.
One-liner for executives: A free, MIT-licensed Laravel package that saves production errors into our own database with the user, URL, queue, and request context attached — so support can triage a customer's issue without a third-party vendor and without our code or customer data leaving our infrastructure. Cost is roughly one engineer-week, including the admin screen we would build on top of it; the trade is that it is a young, single-maintainer project with no alerting and no UI, so it complements rather than replaces a real monitoring service.
The three things to say out loud:
bootstrap/app.php. MIT and small enough to fork if it is abandoned. Deleting it is a composer remove.For engineering, explicitly: treat status/tags/updated_by as the real feature — that's the triage queue — and treat DevLogger::info() in hot paths as an INSERT you are responsible for. Set excluded_paths generously, keep the exception-handler wiring the only auto-capture point, and write a one-page runbook for the cleanup command including the post-delete OPTIMIZE TABLE step the maintainer's own release notes recommend.
Recommended next step: timeboxed spike — one sprint-day to install, wire, and load a week of synthetic error volume; decide go/no-go on a dedicated connection and a PII stance. Do not adopt this as the company's answer to "we can't see production"; adopt it as "the ops team can work errors inside the tool they already use."
How can I help you explore Laravel packages today?