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

Datadog Bundle Laravel Package

presta/datadog-bundle

Symfony bundle for Datadog integration: send StatsD metrics and APM traces from your app with minimal configuration, plus helpers for timing code and tracking custom events. A lightweight way to add Datadog monitoring to existing Symfony projects.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Verdict up front: revised. v2.0.0 materially changes the maintenance picture and corrects two factual errors in the previous assessment. The package is not abandoned: it ships a disciplined release with a changelog, a CI matrix across PHP 8.1/8.2/8.5 and Symfony 6.4/7.4, and PHPStan at level max with an empty baseline. The previous assessment was written against an empty data payload and inferred abandonment from a stale timestamp; that inference was wrong and should be retracted. The core conclusion for our codebase still holds, but for a narrower reason: this is a well-maintained Symfony bundle, and we are a Laravel shop. The blocker is stack fit, not health.

Architecture fit. Unchanged and decisive. Symfony bundles register through config/bundles.php, the Symfony DI container, and config-tree extension classes (PrestaDatadogExtension). Laravel has no equivalent extension point, so a Laravel application cannot consume the bundle's intended surface. The functional payload remains a small Monolog handler that posts records to Datadog's HTTP log intake, wired via DI — roughly 50–100 lines of real logic plus convention. v2.0.0 does not change this; it modernizes the Symfony-side plumbing (Symfony 7.x/7.4 LTS, PHP 8.5, TokenStorageInterface in place of the removed Security class, Extension in place of ConfigurableExtension). All of that is Symfony-internal and irrelevant to a Laravel consumer — which is itself the point.

Integration feasibility. Two paths remain, but the risk weighting has shifted:

  • Consumer path (bundle as-is): still viable only on Symfony. It is now a credible option for a Symfony service — 6.4 and 7.4 LTS are covered, Monolog 3 is a declared dependency (it was already required in 1.x, contrary to the previous assessment's guess that the package capped at Monolog 2), and monolog/monolog plus symfony/http-foundation are now explicit rather than transitive. For a Laravel codebase, still zero.
  • Salvage path (lift the handler): unchanged and still the only path I would sponsor here. MIT-licensed, small, and now better documented — the v2.0.0 breaking-change note tells us the handler is constructor-injected with security.token_storage, which is a concrete signal about what it does with request state. That is a net gain in reviewability.

Technical risk. Re-rated:

  • Abandonment — downgraded from high to low-moderate. Active release, forward-looking framework support (Symfony 7.4 LTS buys a multi-year window), and static analysis at max with an empty baseline are strong quality signals. Residual risk is bus factor, not neglect: this still reads as a small-team or single-maintainer project with no commercial support contract.
  • Dependency drag — largely resolved. Explicit monolog/monolog and symfony/http-foundation constraints, Monolog 3 across both majors, and Symfony ^6.4|^7.0 are exactly the declarations we would want. The v1→v2 break is a clean, well-communicated major, not a silent one.
  • Secret and PII handling — escalated, and now the top risk. The Security → TokenStorageInterface swap strongly implies the handler reads the current security token to enrich log context (user identity, roles, possibly token attributes) before shipping it to a third-party intake. That is a direct path for user identifiers or session-derived data to leave the estate. Read the handler and the default config before anything else; confirm whether context is scrubbed, whitelisted, or forwarded wholesale.
  • Delivery semantics — unchanged. Synchronous per-record HTTP on the request path. Confirm buffering, ordering, and drop behavior.
  • Upgrade surface — new. Anyone on 1.x with Symfony 6.4 upgrades cleanly unless they instantiate DatadogHandler manually or redefine its service, in which case a TokenStorageInterface must be supplied. Internal for default-config users.
  • PHP 8.5 — CI-tested, but treat 8.5 as supported-but-unproven until it is our runtime; do not let a CI matrix entry drive a PHP upgrade decision.
  • Licensing — MIT, clean.

Key questions before any code is written.

  1. Does the handler add anything over Monolog's stock CurlHandler/HttpHandler pointed at http-intake.logs.datadoghq.com? If not, the package's value is configuration ergonomics on Symfony, not transport.
  2. What exactly does it pull from TokenStorageInterface, and is that data scrubbed, whitelisted, or forwarded? This is the gate question.
  3. Does it buffer, batch, or drop on failure — and does it block the request path?
  4. Which Datadog service/ddsource/ddtags/env conventions does it encode, and do they match our taxonomy?
  5. If we vendor the handler, what does it depend on beyond Monolog — does the TokenStorageInterface coupling need to be stripped, and what replaces it in Laravel (Auth::user() behind a guard, or nothing)?
  6. Who owns the fork if we vendor? Name a person, not a team.

Integration Approach

Stack fit. Unchanged for Laravel: treat the package as a reference implementation, not a dependency. For Symfony services the calculus has flipped — as of v2.0.0 this is a reasonable dependency to take, with the caveat that it is small-team maintained and should be pinned with a documented upgrade cadence. Either way, the transport decision dominates the wrapper decision: Datadog's own guidance favors a local Agent or sidecar consuming structured JSON from stdout, which gives buffering, retries, and disk-backed queuing without coupling application code to the vendor.

Migration path. For our Laravel services, unchanged: emit structured JSON via JsonFormatter to stdout or a file channel → ship with the Datadog Agent or Fluent Bit → retain a single outbound-HTTP handler as a documented fallback for hosts where the Agent cannot run. If the Agent is not viable, vendor the handler into app/Logging/ with an attribution header, wire it through a custom channel in config/logging.php, and delete the Composer dependency. v2.0.0 makes the vendoring step easier — the code is now covered by PHPStan at max and a real CI matrix, so the source is more trustworthy to copy than it was.

Compatibility. Verify against the target repo: PHP floor (8.1 works for Symfony 6.4; 8.2+ for Symfony 7), Symfony ^6.4|^7.0, Monolog 3, symfony/monolog-bundle ^3.8. For the vendored path, check whether the handler pulls in Symfony contracts (TokenStorageInterface, HttpClient, EventDispatcher); the token-storage coupling must be replaced or stubbed before the class is usable outside Symfony.

Sequencing.

  1. Read the vendor source end-to-end, including the token-storage path and default config (1–2 hours). Document what it actually does.
  2. Rule on the PII question with the security owner before any spike. If context is forwarded unscrubbed, stop and write our own.
  3. Spike the salvaged handler behind a feature flag in one non-critical service.
  4. Agree the tag/env/service taxonomy with the observability owner before writing config.
  5. Validate in staging against the Datadog log explorer — parsing, facets, retention.
  6. Canary one production service; compare p99 latency and error rate against baseline.
  7. Roll out; pin or fork the dependency with a dated decision note in the repo. If we do adopt on a Symfony service, pin ^2.0 and calendar a re-review at the Symfony 7.4 LTS end-of-support date.

Operational Impact

Maintenance. Under the adopt path on Symfony, upstream is alive and the upgrade burden is now the normal kind (majors with changelogs) rather than the "we own it forever" kind — a real improvement. Under the Laravel path, we still own a handful of lines, which is strictly better than a dependency we cannot use at all. Do not over-read the release: one good release does not prove a support contract.

Support. Still no commercial channel — GitHub issues only, small-team responsiveness, no SLA. That is acceptable for a logging convenience wrapper and unacceptable for anything on the critical path without a fallback sink. Budget on-call expectations accordingly.

Scaling. Unchanged. A synchronous per-record handler scales linearly in latency with log volume and competes with request handling for connections and event-loop time. At sustained high volume this is the dominant failure mode; the Agent-based path with disk buffering is what to design for from day one.

Failure modes to instrument.

  • Silent log loss on Datadog 5xx or partition — confirm whether v2.0.0 adds any retry or dead-letter behavior; if not, assume none.
  • Request-path blocking when intake is slow — log shipping becomes a latency contributor during exactly the incident you need logs for.
  • Retry storms during intake degradation.
  • PII/secrets egress via token-derived context — new and specific to v2.0.0's design. Instrument a canary that asserts no user identifiers appear in the intake payload, and alert on it.
  • Secret/config drift between environments, surfacing as 403s that look like data loss.
  • Parsing regressions after a formatter or major-version change, silently breaking dashboards and monitors.

Mitigations: internal metric on handler failure, alert when ingest volume drops below a floor, a permanent local file channel as last-resort sink, and a payload assertion for PII on the token-storage path.

Ramp-up. Learning the package remains hours. The real ramp is the operational context: Datadog intake endpoints and reserved attributes (service, ddsource, ddtags, host), log parsing and facet definition, the Agent/sidecar deployment model, and — new for this release — the security-model review of what token data the handler emits. Spend the effort there; the bundle itself is not the work.

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