keboola/logging-bundle
A Symfony bundle that adds Keboola-specific logging to your application, wiring Monolog handlers, processors, and configuration so logs are structured, consistent, and ready for Keboola's logging infrastructure. Drop it in, configure a few options, and get production-ready logging without boilerplat...
extra.dd.trace_id / extra.dd.span_id into log records so Datadog can link a log line to the trace that produced it. That is a concrete, measurable support capability — “customer says request X failed” becomes a single click instead of a log grep. This is the decision it most directly informs: do we care enough about MTTR to wire logs to traces?function_exists('DDTrace\current_context') is true. That means it is safe to install unconditionally in a base service template — no config keys, no env flags, no broken builds where ddtrace isn’t present. This supports the roadmap decision to standardize observability in a shared skeleton rather than per-team opt-in, which is the real cost saving.composer require it and get behavior; you would lift the processor class and register it in Laravel’s Monolog channel config. The 2.0.0 Monolog 3 cutover actually aligns with modern Laravel (which is on Monolog 3), but it does not change the conclusion: the decision remains “dependency vs. 30-line internal class,” and the answer often flips to internal.php constraint, but Monolog 3 silently imposes a PHP 8.1+ floor through its transitive requirement. So the effective minimum PHP moved without the package’s own metadata saying so, and the 1.x→2.x boundary is a hard Monolog-major cliff rather than a semver-compatible bump. Adopting an unpinned package that also gates on Monolog majors shifts validation burden onto you at every fleet upgrade.config.policy.advisories.block=false as a deliberate setting made to make Symfony 7.2 CI resolution satisfiable. A Monolog 3 / Symfony 7 dependency refresh is exactly the kind of change that may let that setting be dropped. Confirm the current state before adoption rather than assuming it persists.keboola/logging-bundle is a read-only mirror; all changes must land in keboola/platform-libraries. A decision to adopt implies a decision about whether your team is willing to file upstream PRs into another org’s monorepo. With a breaking major now in play, the odds you need a local fix (e.g. supporting Monolog 2 and 3 simultaneously) go up, and that friction is a real cost.Consider it when all of these hold:
ddtrace extension in at least some environments.keboola/platform-libraries.php constraint is declared and the Monolog 3 requirement now imposes an implicit PHP 8.1 floor.Look elsewhere when:
config.policy.advisories.block=false. That setting was deliberate (it made the Symfony 7.2 CI resolution satisfiable), but it means Composer’s advisory gate is off for this package’s resolution — a policy question worth answering before adoption, not after, and worth re-checking after the dependency refresh in 2.0.0.To executives (one paragraph): This is a small observability utility that attaches trace and span identifiers to every log line, which lets Datadog link a log entry directly to the request trace that produced it. Practically, it shortens the path from “a customer reports a failure” to “here is the exact execution path” — a direct MTTR reduction with effectively zero integration cost and no configuration to manage. It is safe to install fleet-wide because it silently does nothing where Datadog tracing isn’t present, so it cannot break a build or an environment. The new 2.0.0 release adds Symfony 7 support but requires Monolog 3, so it is a natural companion to the Monolog upgrade we are already planning rather than a separate initiative — and services that aren’t ready for Monolog 3 stay on the previous version with no loss of functionality.
To engineering (one paragraph): Three classes. KeboolaLoggingExtension::load() checks function_exists('DDTrace\current_context') and, only then, registers Monolog\DataDogContextProcessor with the monolog.processor tag. The processor writes extra.dd.trace_id and extra.dd.span_id — the exact key names Datadog’s correlation expects, so renaming them silently breaks correlation without failing any test or build. The runtime guard is the whole reason the bundle needs no configuration, and both branches (extension present / absent) are covered by tests via a stubbed DDTrace\current_context(). 2.0.0 is a breaking release: Monolog 3.x only, plus Symfony 7.x support. The release notes describe no change to the processor or key names — the break is dependency-level — so verify your Monolog major before bumping, and expect 1.2.0 to remain the pin anywhere you’re still on Monolog 2. Note also that the package still declares no php constraint: Monolog 3 quietly raises the effective floor to PHP 8.1, which is the kind of implicit requirement that surfaces as a broken build a week later. Two operational notes before you adopt: this is a Symfony bundle, not Laravel — Laravel teams should port the processor into their logging channel config rather than adding the dependency; and the GitHub repo is a read-only mirror, so any fix must go to keboola/platform-libraries under libs/logging-bundle/ with fix(logging-bundle): … commits, or it will be force-pushed away. Validate on your own Symfony/PHP/Monolog matrix.
How can I help you explore Laravel packages today?