koderhut/onelog-bundle
Symfony bundle that integrates OneLogin's PHP SAML toolkit, adding SAML 2.0 service-provider authentication, configurable identity providers, attribute mapping, and firewall-based single sign-on to Symfony applications. It simplifies SSO setup through bundle configuration.
What changed since the last review. Release 1.2.0 adds middleware for message and context pre-processing, letting the logger accept objects and pull data from them before delegating to the underlying logger. Two things follow from this, and they point in opposite directions:
ProcessorInterface — a first-class, framework-native concept in Laravel via config/logging.php tap/processors arrays and $logger->pushProcessor(). The package is reimplementing a solved problem behind a new name.Architecture fit — still poor. Nothing in 1.2.0 addresses the structural blockers. The -bundle suffix and koderhut vendor namespace still indicate a Symfony bundle registered through a Kernel and DI extension; Laravel has no boot surface for it. The release adds an extension point inside the package's own pipeline, which increases rather than decreases the amount of proprietary surface an adapter would have to bridge.
| Signal | Value | Change | Implication |
|---|---|---|---|
| Stars | 1 | — | Still no community validation |
| Dependents | 0 | — | Still no external consumer of the API |
| Latest release | 1.2.0 | new | Contradicts "dormant"; does not establish cadence |
| Prior release gap | ~7 years | — | One data point does not make a cadence |
| Score | 0.235 | — | Bottom tier composite |
The honest read: a single additive minor release after a long quiet period is evidence of life, not evidence of a support commitment. One release tells you nothing about the next one. Treat it as raising the maintainer-reachability question from "probably no" to "unknown, worth one email," not as resolving it.
The new feature, evaluated as a TPM. Middleware-based context enrichment has four properties that matter:
| Property | Assessment |
|---|---|
| Novelty vs. Monolog | None. ProcessorInterface covers message and context mutation before handler dispatch. |
| Terminology fit | Poor. "Middleware" in Laravel means HTTP middleware; a maintainer searching for this will land in the wrong abstraction and find no docs. |
| Lock-in surface | Negative. Each hop in the package's middleware chain is a place its pipeline differs from Monolog's, complicating a "extract the useful bit" strategy. |
| New risk introduced | Object hydration in the logging path. This is the significant change. |
New technical risk — object traversal in the log path. "Receive objects and retrieve data directly from it" means the logging subsystem now executes application code (getters, magic __get, lazy relations) during log emission. That is a high-blast-radius coupling:
None of this is disqualifying on its own — Monolog processors can do exactly the same damage — but it converts a passive dependency into an active participant in the request path.
Technical risk — high, structurally, with one item downgraded. The absence-of-counterparty risk moves from high to unknown. Everything else stands: MIT grants no security-response obligation, no CVE path, no upgrade commitment. The secondary risk is now sharper — logging is cross-cutting, and 1.2.0 moves it closer to application internals.
Key questions to resolve before any further investment:
composer.json — php and symfony/*. This single check still decides the ticket. A 1.2.0 bump may or may not have moved off PHP 5.6/7.x.koderhut/onelog) consumable as plain PSR-3? Still the deciding question for anything beyond a spike.stack channel plus processors does not? Unanswered by 1.2.0; the release arguably is processors, renamed.Recommendation: reject for adoption — unchanged, with the rationale narrowed. The prior verdict rested partly on dormancy; that leg is now weaker. The remaining legs are sufficient on their own: framework mismatch, no Laravel service provider, unknown PHP/Symfony constraints, zero dependents, and a core capability duplicated natively. Escalate to a scoped 1–2 day source read only if a stakeholder can articulate a logging requirement Laravel's native stack fails. The 1.2.0 feature is not that requirement.
Stack fit — none, as packaged, unchanged. Assuming Laravel 10/11 on PHP 8.2+ with Monolog 3.x, there is still no supported install path. 1.2.0 adds capability inside the Symfony-shaped pipeline; it does not add a Laravel entry point.
Migration path — the new feature has a direct native equivalent. Map 1.2.0's middleware onto what Laravel already ships:
| 1.2.0 concept | Laravel/Monolog native |
|---|---|
| Message pre-processing | ProcessorInterface::__invoke() mutating $record['message'] |
| Context pre-processing | Processor mutating $record['context'] |
| Object hydration helper | A small, owned processor class doing explicit, typed extraction |
| Pipeline ordering | $logger->pushProcessor() order, or per-channel tap array |
The correct migration is therefore write a ~40-line processor, not adopt a bundle. That processor is first-party, testable, and free of framework coupling. This is the strongest argument in the whole review: the feature that justified 1.2.0 is cheaper to reimplement than to integrate.
Compatibility — still assume failure, verify cheaply. Composer dry-run against the production PHP/Laravel matrix remains step one. --ignore-platform-reqs remains a stop signal. A newer release tag is not evidence that constraints moved; 2018-era packages frequently ship feature commits on unchanged platform pins.
Sequencing (only if the spike is authorized):
composer.json for php/symfony/*; attempt resolution against the production matrix. Fail here and stop.Effort estimate. Adapter-plus-fork remains ~3–5 engineer-days, with 1.2.0 adding perhaps half a day to bridge the middleware chain. A native processor is well under one day, with no ongoing tax. The burden of proof remains with the package, and 1.2.0 did not discharge it.
Maintenance — downgraded from "inert" to "unknown," not to "low." One release after a seven-year gap changes the diagnosis but not the budget. Until a cadence is demonstrated, plan as if you own the fork: PHP minor upgrades are your patches, Monolog major bumps are your migrations. Record it as a perpetual small line item. The correct update to the previous assessment is a footnote, not a reversal.
Support — marginally improved, still thin. A responsive maintainer is the best realistic outcome for a one-star project. That is a single point of contact with no SLA, no on-call, and no community corpus to fall back on. Ramp-up still means reading source. Do not place this on an audited path without a named internal owner.
Scaling — the fan-out multiplier is unchanged; 1.2.0 adds a per-event compute cost. Object hydration runs on every log event before every sink. Under high-cardinality logging this is measurable CPU, and if any getter touches the database it is I/O on the request path. Mitigations: hydrate explicitly rather than reflectively, cap traversal depth, and sample high-volume routes. Native processors give you the same control with fewer layers.
Failure modes — the list grows by two.
--ignore-platform-reqs breaks weeks later. (unchanged)Ramp-up — unchanged, low ceiling. No docs for 1.2.0 beyond a one-line changelog entry; no examples; no Q&A. The naming ("middleware") actively misdirects a Laravel engineer. Half a day to establish what the package does remains the floor.
Verdict. The 1.2.0 release weakens the dormancy argument and does nothing else. Framework mismatch, absent dependents, unknown platform constraints, and duplication of Monolog processors still dominate. Do not adopt. Revisit only if a named owner volunteers to fork and the maintainer confirms a support posture and the native capability diff is documented as insufficient. Logging is infrastructure — prefer the boring, maintained, framework-native path.
How can I help you explore Laravel packages today?