alt-three/logger
Alt Three Logger is a context-aware logging package for Laravel that extends the standard PSR-3 logger with fluent helpers like withContext, withTags, and withUser, so every log entry can carry user IDs, tags, and custom metadata without repeating yourself at each call site.
Architecture fit
Alt Three Logger is a thin decorator over Laravel's Monolog binding, built for the Laravel 5.0–5.5 era. Before Laravel 5.6, there was no config/logging.php; Monolog was bound as Psr\Log\LoggerInterface with a fixed handler stack, and the only way to get a named/scoped logger or reach the underlying Monolog instance was to wrap it. This package supplied exactly that: getLogger() to escape to Monolog, newLogger($name) to scope, and a Logger facade so code could type-hint PSR-3 without losing access to those.
That gap closed in Laravel 5.6 (Feb 2018) with named channels, Log::channel(), Log::stack(), and later Log::withContext() / Log::shareContext(). Every capability this package exists to provide is now native. Architecture fit on any supported Laravel version is effectively zero — it adds an indirection layer and a second facade on the one code path (logging) you least want ambiguous.
Integration feasibility
Blocked at dependency resolution, not at code. The package almost certainly pins php: ^7.0 and illuminate/* to the 5.x line (verify against composer.json). Laravel 9–11 require PHP 8.0/8.1+ and Illuminate 9–11; composer require will fail, and --ignore-platform-reqs will not resolve the Illuminate conflict. The only viable host is an already-running legacy 5.x app — which is itself EOL and outside any vendor security process. Zero Packagist dependents corroborates that there is no field-tested failure data to lean on.
Technical risk
Stringable-typed log() signature).pushHandler, handler naming). Laravel 10/11 ship Monolog 3; the passthrough surface is the brittle seam.Key questions
require constraints, and confirm there is no replace/provide trick that makes it loadable?Logger that collides with assumptions about Illuminate\Support\Facades\Log?Log::channel() + Log::withContext() cannot reproduce? (Expected: no.)Stack fit
Greenfield or Laravel 8+: do not integrate. Use channels, stacks, and context natively. Brownfield Laravel 5.0–5.5: tolerate it only as an existing frozen dependency and open a removal ticket immediately.
Migration path
Logger::getLogger(), Logger::newLogger('x'), app('logger'), and any type-hints on the concrete class.config/logging.php channel (daily / stderr / slack / custom monolog driver).Log::channel() and Log::withContext(). Call sites do not churn.Compatibility notes
Psr\Log\LoggerInterface over the package class so the seam stays swappable.Stringable arguments or it will fatal on object interpolation.Logger during transition if anything else assumes Log semantics; use a distinct alias and retire it.Sequencing
Fold this into the next framework upgrade rather than treating it as standalone work — the upgrade forces the dependency break and amortizes the shim.
Maintenance
Zero. Archived since 2018, single historical maintainer, no releases, no issue triage. The moment you adopt it, treat it as vendored source you own — and budget forking as a permanent tax on a capability the framework ships free.
Support
No vendor, no community (11 stars, 0 dependents), no documentation beyond a README. Internal expertise is likely zero; escalation is "read the Monolog source," which shifts risk onto whoever is on call.
Scaling
The delegation hop is negligible per call, but the wrapper sits between application code and handler construction, which complicates per-channel level filtering, sampling, and swapping in buffered/handoff handlers for throughput. Native Log::stack() and channel configs are strictly better suited to per-service tuning.
Failure modes
TypeError, Monolog API drift (Call to undefined method), facade unregistered after a config change.Ramp-up
Comprehension is ~1 hour — the API is small. The real cost is archaeology: why it was added, what depends on it, and proving removal is safe. That is a short spike plus a log-parity check, not a training plan.
Recommendation: replace, don't integrate. Native Laravel logging fully covers the use case; the only defensible action is a deprecation ticket scoped to the next framework upgrade, executed behind a shim so removal is incremental and reversible.
How can I help you explore Laravel packages today?