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

Loggable Bundle Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — fundamental mismatch that reframes the entire evaluation. The request scopes this as a Laravel/PHP package, but ibrows/loggable-bundle is a Symfony bundle. It integrates through Symfony's dependency-injection container and Doctrine ORM's unit of work (flush lifecycle listeners), persisting entity change-sets into a configurable log entity. Laravel's data layer is Eloquent, not Doctrine, so there is no native seam for this package to attach to. A TPM should treat this as the headline finding: the package cannot be dropped into a Laravel codebase, so the decision is not "adopt vs. reject" but "mine the pattern vs. ignore."

Integration feasibility — low as a dependency, moderate as a reference. Two realistic paths exist. (1) Fork the diff/listener logic and reimplement it as Eloquent observers — a few engineering days, but the output is a bespoke component we own. (2) Bridge Doctrine into Laravel (laravel-doctrine) purely to host an auditing concern — a disproportionate architectural commitment for a single feature. Neither is a "composer require and configure" motion. The genuinely reusable asset is the pattern (field-level before/after diff, actor attribution, timestamped append-only log table), which a competent engineer can reproduce in ~100–300 lines against the native stack.

Technical risk — high. Zero stars, zero dependents, a composite score of 0, and MIT licensing together tell a clear story: freely forkable, but with no adoption evidence, no de facto hardening, no reproducible integrations, and no signal of maintenance against current PHP/Symfony versions. The "opportunity: 4.16" metric should be discounted as noise absent any real-world usage. For a TPM, this is a supply-chain and abandonment risk, not a capability risk.

Key questions for the team

  • Which runtime is actually in scope? If the estate is Laravel/Eloquent, this becomes a reference implementation only. If there is a Symfony/Doctrine service that genuinely needs auditing, mature alternatives (Gedmo Loggable, maintained Doctrine audit bundles) are stronger bets than a zero-adoption one. The answer flips the recommendation.
  • What is the audit requirement's true shape? Full field-level diffs, or just "who changed what, when"? Most product needs are lighter than a full change-set engine, and that gap determines whether a pattern-port is justified at all.
  • Is regulatory compliance in scope? If tamper-evidence, retention windows, or guaranteed pre-commit writes are required, no generic CRUD-log package — including this one, including its replacements — satisfies it. That warrants a purpose-built design.
  • Will we own this indefinitely? Any fork becomes internal code with an internal owner and an internal upgrade path.
  • Does PII land in the log payload? Copying field values into a second table silently duplicates personal data; redaction/allow-listing must be a design requirement from day one.

Integration Approach

Stack fit — not fit for purpose as a dependency. For a Laravel-first estate, the correct comparison set is mature, adopted auditing packages (spatie/laravel-activitylog for broad activity logging, owen-it/laravel-auditing for field-level model auditing with before/after payloads) or a thin set of Eloquent observers. For a Symfony/Doctrine estate, Gedmo's Loggable extension or a hand-written EntityListener/EventSubscriber are maintained, better-documented options. In neither case does this package win on integration cost, support, or longevity.

Migration path. Recommend the "pattern reference, not dependency" route explicitly:

  1. Codify the requirement — which events, what payload (actor, entity, field, before/after, timestamp), what retention and access rules.
  2. Prototype in the real stack — Eloquent observers or an adopted auditing package; validate the query patterns support and product actually need (e.g., "who raised this price?").
  3. Port selectively — if the Ibrows diff semantics are specifically desirable, lift the diff algorithm behind our own interface; it is small and self-contained.
  4. Do not introduce Doctrine into a Laravel application solely to host this concern.

If leadership still insists on the literal dependency, the path is: introduce Doctrine via bridge → register equivalent listeners → manage dual-write risk during rollout → accept ongoing fork ownership. That is disproportionate effort for the feature and should be documented as a knowingly expensive option.

Compatibility. Unverified against current PHP/Symfony versions. With zero dependents, there is no evidence of compatibility with anything recent, so assume patching is required before it runs — which further erodes the reuse argument. This must be confirmed by spike, not assumed.

Sequencing

  1. Spike (1–2 days): stand the bundle up in a scratch Symfony app, confirm behavior, and capture the exact log payload shape and listener wiring.
  2. Decision gate: dependency vs. pattern-port vs. established alternative — resolved against the confirmed runtime.
  3. If pattern-port: build the audit concern on the native stack, with PII redaction and retention designed in from the start.
  4. If dependency (unlikely): Doctrine bridge, listener registration, schema migration, dual-write validation, then feature work.

Framework translation for stakeholders. The pattern maps cleanly to Laravel primitives: Symfony EntityListener → Eloquent model observer (or laravel-auditing); bundle log entity → audits/activity_log table; DI wiring → service container binding or package config. The concept transfers at near-zero cost; the code does not.

Operational Impact

Maintenance — we would own it in full. With no upstream activity and no dependents, any adoption becomes a fork we patch, test, and upgrade across PHP/Symfony/Doctrine version bumps. A TPM should budget this as ongoing stewardship, not a one-time integration. The pattern-port route has similar ownership but with the advantage that the code matches our conventions, our test suite, and our review process.

Support. No community, no issue triage, no security advisories to subscribe to. The internal escalation path is "whoever forked it," which is acceptable only for a low-criticality, non-compliance feature. For a capability that enterprise buyers scrutinize, an unmaintained zero-adoption dependency is a governance finding waiting to happen at procurement or audit review.

Scaling. The Doctrine-listener pattern writes one audit row per changed entity per flush — a hot path and an unbounded-table-growth concern at write volume. Assume no batching, async logging, or backpressure handling; validate explicitly if volume is non-trivial. Retention, partitioning, and archival are ours to design regardless of implementation, and the same is true of any replacement.

Failure modes

  • Write-path poisoning: a listener exception inside a Doctrine flush can abort or roll back the business transaction. Audit logging must never break the write path — isolate via try/catch, queue/async dispatch, or out-of-band capture.
  • PII accumulation and data-residency exposure: audit payloads copy personal data into a second store; this is both a compliance and a storage liability and must be designed against, not patched later.
  • Silent no-op after upgrades: unmaintained listeners with changed signatures can stop firing without error, silently erasing the audit trail — the worst failure mode because it's invisible.
  • Schema drift: the loggable entity and its mapping can fall out of sync with evolving domain entities.
  • Unbounded growth: table bloat degrading query performance and backup windows.

Ramp-up. The concept ramps fast — auditing via ORM events is well understood. This artifact ramps slowly in a Laravel shop, because the team must first learn Symfony bundle wiring and Doctrine lifecycle semantics just to read it. That ramp-up cost is not repaid by a package with no adoption. The pattern-port route has a lower learning curve, since it lands in idioms the team already uses daily.

TPM recommendation. Do not adopt as a dependency. Record it as an evaluated-and-rejected option, with two reasons on the record: ecosystem mismatch (Symfony/Doctrine bundle against a Laravel/Eloquent scope) and abandonment/supply-chain risk (zero stars, zero dependents, no maintenance signal). Cite the mature alternatives in the actual stack, and scope a small pattern-port — a change-log table plus Eloquent observers, with PII redaction and retention designed in — only if the field-level diff semantics are a genuine product requirement. Treat the "opportunity" score as noise; there is no adoption evidence to support it.

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.
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle