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

Wide Events Bundle Laravel Package

jblab/wide-events-bundle

Symfony bundle for wide events: accumulate rich contextual data throughout a request and dispatch it as a single structured event. Cuts event noise, simplifies logging and observability, and keeps handlers clean. Integrates with Symfony's event dispatcher and DI container.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Important framing correction: despite being scoped as a "Laravel/PHP package," the 0.1.0 release notes describe a Symfony bundle (jblab/wide-events-bundle). Every integration point named — register HTTP lifecycle subscriber, Symfony bundle configuration, Symfony dependency injection foundation, messenger middleware, monolog emitter — is Symfony-specific. If the consuming application is Laravel, this package is not directly usable; only the framework-agnostic core, normalization, sampling, and opentelemetry pieces could be lifted, and even those would need a Laravel service provider, HTTP middleware, and queue-job middleware written in-house. This is the single most consequential fact in the release and should be resolved before any further evaluation.

Architecture fit. The design is a coherent implementation of the "wide event" observability pattern: one mutable WideEventContext accumulated over a unit of work, then emitted once, rather than many narrow log lines. That is the correct shape for high-cardinality debugging (per-tenant, per-request, per-message correlation) and it aligns well with tail-based sampling, which is the only sampling strategy that can retain slow or failed events you didn't know to keep in advance. Layering looks deliberate: core → emission → normalization → sampling → framework bridges (http, messenger, monolog) → opentelemetry correlation. The explicit "enforce component isolation boundaries" commit is a positive signal for a 0.1.0 — it suggests the author intends the core to stay portable rather than accreting Symfony coupling.

Integration feasibility. As a Symfony bundle: high. composer require, enable the bundle, configure, and the HTTP subscriber plus Messenger middleware give request and message correlation with little application code. As a Laravel dependency: low without a shim. Note also that the release is at 0.1.0 from 0.0.0 — this is the first tagged release, not an incremental feature drop. There is no production track record, no documented upgrade path, and semver guarantees are effectively absent pre-1.0.

Technical risk.

  • Framework mismatch (high). Assessment premise vs. actual artifact. Verify before spending further review effort.
  • Maturity (high). Initial release, single maintainer org (jblab), no prior assessment baseline. Bus-factor and longevity risk dominate.
  • Telemetry pipeline coupling (medium). Monolog and OpenTelemetry emitters both fan out the same event; without care this duplicates volume and cost. The samples/limits and redaction features mitigate but do not eliminate this.
  • PII exposure (medium). Redaction is implemented as an opt-in normalization feature. Any adoption should treat default redaction coverage as unproven until tested against the org's own sensitive-field inventory.
  • Behavioral subtlety (medium). The sampling: use outcome duration for slow-event retention fix indicates tail sampling depends on correct outcome/duration capture at the subscriber boundary. Getting duration wrong silently drops exactly the slow events the pattern exists to catch — a failure that is invisible until an incident.
  • Context mutation (low/medium). Mutable shared context across a request or message handler is ergonomic but invites leakage between nested or forked work; needs scrutiny for async/queue retry paths.

Key questions.

  1. Is the target application Symfony or Laravel? If Laravel, is the intent to fork the core, or to adopt an alternative?
  2. What is the intended destination for emitted events — Monolog sink, OTLP collector, or both — and what is the projected event volume and cost?
  3. Are redaction rules default-deny or default-allow? Can sensitive fields be enumerated centrally rather than per-call-site?
  4. What is the tail-sampling policy surface (error retention, slow threshold, percentage of the remainder) and can it be tuned without a redeploy?
  5. Does the Messenger middleware preserve correlation across retries, failures, and redelivery, or does each attempt generate a fresh event ID?
  6. Who maintains the package long-term, and what is the stated compatibility policy pre-1.0?

Integration Approach

Stack fit. Strong fit for a Symfony 6/7 or 8 application already using Monolog, Messenger, and (ideally) OpenTelemetry. Weak fit for Laravel, and for any stack where the observability backbone is something other than Monolog/OTel — in that case the emission layer would need a custom emitter and much of the bundle's value is lost.

Migration path. This is additive, not a migration. The recommended path is a shadow-mode rollout: install the bundle, enable the emitters, but keep existing logging untouched and route wide events to a separate index or stream. Run for one to two weeks, then compare wide-event coverage against existing logs for a handful of known incidents. Only after that does it make sense to retire redundant narrow log statements. Because the package emits rather than intercepts, rollback is uninstalling the bundle — a genuinely low-risk exit, which is the strongest argument for piloting.

Compatibility. Pre-1.0, so pin exactly (0.1.0, not ^0.1) and treat every subsequent release as potentially breaking. The Symfony bundle configuration and DI foundation are brand new in this release, meaning the extension/configuration class names and service IDs are the most likely surfaces to churn in 0.2.x. Anything the team writes against those (compiler passes, service decorators) should be isolated in one place. Verify PHP version and Symfony minor-version support in composer.json rather than inferring it.

Sequencing.

  1. Resolve the Symfony-vs-Laravel question — this gates everything.
  2. Stand up a single non-critical Symfony service with the Monolog emitter only; validate event shape and volume.
  3. Add the HTTP lifecycle subscriber; confirm request IDs propagate end-to-end into downstream services.
  4. Add OpenTelemetry trace correlation; confirm the trace_id/span_id join actually resolves in the backend.
  5. Tune normalization limits and redaction against a real sensitive-field inventory; write a test asserting redaction of each field.
  6. Enable tail-based sampling last, with a slow threshold derived from measured p95 latency, and validate that induced slow/error requests are retained.
  7. Extend to Messenger only after HTTP is stable, since retry semantics are the trickiest path.

Operational Impact

Maintenance. Low code footprint expected — the bundle is configuration plus subscribers, so there is little application-side code to maintain. The real maintenance burden is policy: redaction field lists, sampling thresholds, and normalization limits all drift as the domain evolves and need an owner. Budget for that explicitly, or the redaction list silently rots and the telemetry becomes a compliance liability rather than an asset. Upstream maintenance risk is real: one maintainer org, pre-1.0, and a single release. Assume the team may need to vendor or fork.

Support. No ecosystem of Stack Overflow answers, blog posts, or third-party integrations will exist for a first release. Support is effectively "read the source." Given the codebase is small (core, emitters, subscribers, middleware), that is workable, but it means onboarding requires a code-reading exercise rather than documentation. Confirm whether the repo has a README, configuration reference, and SECURITY.md; treat absence as a gating concern for anything handling PII.

Scaling. The design scales well in the observability sense — one event per request/message instead of N log lines is a substantial volume reduction, and tail-based sampling caps the rest. Two caveats. First, context accumulation is in-process memory; a request that appends many entries (loops, batch handlers, ORM listeners) grows unboundedly unless the normalization limits are actually enforced — verify the limits are truncating, not just documented. Second, the bundle adds latency to every request and every message; expected overhead should be measured in the pilot rather than assumed trivial.

Failure modes. Ranked by how quietly they fail:

  • Silent sampling of the wrong tail. If duration or outcome capture is incorrect at the subscriber, slow and failed events get dropped and you keep only the boring successful ones. Almost undetectable until an incident where you have no data. Monitor retained-event counts by outcome class.
  • Redaction gaps. PII reaches the log sink. Detected late and expensively.
  • Duplicate emission. Both Monolog and OTel emitters enabled without coordination doubles volume and cost, and creates two divergent copies of the same event.
  • Correlation break in async paths. Messenger retries minting new IDs severs the trace, so a five-attempt failed job appears as five unrelated events.
  • Emitter-exception amplification. A failing Logstash/OTLP endpoint must not throw into the request path. Verify all emitters are fail-open.
  • Symfony upgrade breakage. New bundle config and DI foundation are the most likely churn surfaces on minor upgrades.

Ramp-up. Fast for a Symfony team: on the order of a day for a working pilot by an engineer comfortable with Symfony bundles and DI, plus several days of iteration to land redaction, limits, and sampling policy. The conceptual learning — wide events versus narrow logs, tail versus head sampling — is the larger investment, and it applies to whoever will own the telemetry pipeline, not just the engineer doing the install. For a Laravel team the ramp-up is materially different: expect one to two weeks of engineering to build the framework bridges, at which point the team is maintaining a fork of an immature package and should weigh that against adopting a mature Laravel-native alternative.

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.
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource