ibrows/loggable-bundle
Symfony bundle that automatically logs changes to Doctrine entities, tracking who created, updated, or deleted records. It hooks into Doctrine listeners and the Symfony event system to build an auditable history of your application's data without repetitive logging code in every service.
Audit trails as a platform capability, not a feature ticket. This package's entire value proposition — automatically capturing insert/update/delete on domain entities with field-level old/new values, acting user, and timestamp — maps directly onto a class of product decisions that recur across roadmaps:
The decisive product fact: despite being filed as a Laravel/PHP package, this is a Symfony bundle built on Doctrine ORM event listeners. On a Laravel/Eloquent stack it is not installable in any meaningful sense — it becomes a reference implementation you read in an afternoon. Any PM decision here should be framed as "adopt the pattern," not "add the dependency."
Consider it when:
Look elsewhere when:
spatie/laravel-activitylog (broad activity logging) or owen-it/laravel-auditing (field-level before/after model auditing) are the mature, maintained equivalents. Do not port a Symfony bundle to avoid a dependency.EntityListener/EventSubscriber beats a zero-adoption bundle on every axis.To executives: We evaluated a free, MIT-licensed audit-logging component — the "who changed what, when" trail that enterprise buyers and support teams ask for. It's a zero-adoption Symfony component, so it isn't something we'd depend on; it's something we read. Recommendation: treat it as a design reference and budget 1–2 engineering days to build the same capability natively in our own stack. We get the compliance checkbox, the support-forensics win, and a foundation for customer-facing activity feeds — with no third-party maintenance risk and no licensing cost.
To engineering: Framework mismatch is decisive. This is a Symfony/Doctrine bundle using onFlush-style listeners and DI wiring; on Laravel/Eloquent there is no seam to hook into without a Doctrine bridge, which is disproportionate effort for one concern. The extractable value is small and self-contained: a listener on entity writes that persists an append-only row of (actor, entity type, entity ID, field, old value, new value, timestamp). Two design points to settle before building: PII in log payloads (allow-list fields, redact the rest) and write amplification on hot entities (queue the write; never let an audit failure roll back the business transaction).
Bottom line: Low cost, low risk — if treated as a reference implementation. Poor fit as a live dependency on either framework. Approve as a design input and a source of requirements, not as an addition to the dependency manifest.
How can I help you explore Laravel packages today?