zetacomponents/event-log
The Zeta Components EventLog provides a simple, database-backed event logging system for PHP applications. Record events with timestamps, sources, and custom data, then query, filter, and audit them through a clean API.
Architecture fit. zetacomponents/event-log is a component of the Apache Zeta Components project (the former eZ Components), a PHP 5-era library built around its own ezcEventLog object model, its own writer abstraction, and its own message-formatting pipeline. It predates PSR-3 entirely. Laravel's logging stack is Monolog-centric: the Log facade resolves to a Psr\Log\LoggerInterface, channels are configured in config/logging.php, and contextual/structured logging flows through Monolog processors and handlers. There is no seam where an ezcEventLog instance slots in natively — any use requires an adapter that either implements Psr\Log\LoggerInterface over the Zeta object or a custom Monolog handler that forwards to it. That is achievable, but it means the package sits beside Laravel's logging architecture rather than inside it, and every Laravel logging feature (stack channels, Log::withContext, daily rotation, Log::shareContext) has to be re-justified or reimplemented on top.
Integration feasibility. Mechanically, yes: it is published on Packagist as zetacomponents/event-log, so composer require will work, and a service provider can register a singleton plus a Log channel driver in perhaps a day of spike work. The real question is whether the component offers anything Monolog does not. Its distinguishing capabilities are its writer set (file, syslog/Unix syslog, mbox, email, database table, null) and its audit-oriented message model — a fixed set of fields (timestamp, source, severity, message, optional context) designed for compliance-style event logs rather than application debugging. That is genuinely adjacent to, but not the same as, Laravel's Log facade. If the requirement is "structured audit trail with DB persistence and defined retention," Monolog plus a custom handler, or a purpose-built audit package, delivers the same outcome with modern PHP compatibility.
Technical risk. This is the dominant factor, and it is severe.
each(), dynamic property creation), and untested behavior on modern engines. Even where it loads, it is untested against the runtime you would actually deploy.NOASSERTION. Zeta Components were released under Apache-2.0, but "NOASSERTION" means the automated detection could not confirm it from the repository's files. For a TPM, that is a legal-review blocker, not a footnote — especially for an audit/logging component that may be scrutinized in compliance contexts.Key questions.
LICENSE/NOTICE files, or is NOASSERTION unresolved?E_ALL? A one-day spike answers this definitively.Stack fit. Poor on paper. Laravel's logging contract is PSR-3; this package is not, and will never be. The only defensible integration is isolation: wrap ezcEventLog behind an application-owned interface (AuditLogger) implemented by an adapter, and register that adapter in a service provider. Nothing in application code should reference ezc* classes directly. This keeps the vendor choice reversible and confines the compatibility risk to a single, testable class.
Migration path. If pursued, treat it as an experiment with an exit ramp, not a foundation:
App\Contracts\AuditLogger with methods expressed in domain terms (record(string $event, array $context, string $severity)), not in Zeta terms. Implement ZetaAuditLogger and bind it in a provider.MonologAuditLogger against the same contract and run both behind a config flag. This is cheap and gives you a like-for-like comparison plus a zero-cost fallback.Compatibility. Bind the dependency to an exact patch version and pin it with composer.lock; do not allow ^ ranges on an unmaintained package. If any source patch is required (likely, for PHP 8), vendor the fork under an internal namespace and document the divergence — at which point you are maintaining a library, not consuming one.
Sequencing. Do the legal/license check and the PHP compatibility spike before writing the adapter. There is no value in adapter work if either gate fails, and with 0 dependents and no upstream maintainer, both gates are live risks rather than formalities. Only after both pass should the contract and provider be built.
Maintenance. Effectively a fork commitment. There is no upstream to send patches to and no release cadence to track. Any PHP upgrade — 8.3 to 8.4, or a Laravel major that shifts its Monolog major — is a manual compatibility exercise on code nobody on the team wrote. The realistic steady-state cost is a few days per year of unbudgeted work plus an ongoing "who owns this" question. Compare that to a maintained alternative, where the same work is a composer update.
Support. None. No vendor, no maintainer, no issue triage, no security advisories. Internal escalation is the only path, which means the team must be capable of reading and patching the source. If the team cannot debug a PEAR-era PHP codebase under time pressure during an incident, this package should not ship.
Scaling. The writer model is synchronous and per-event: file and syslog writes block on I/O, and the database writer issues an insert per event unless the consumer batches. In a Laravel app handling meaningful request volume, an audit logger on the hot path will become a latency contributor unless it is queued. The clean pattern — dispatch an audit event to a queue and let a worker write — is straightforward with Laravel's queue but has to be built around the package, not with it. Log volume and retention also become an application concern: there is no built-in rotation, so file writers need external management (logrotate) and DB writers need a pruning job.
Failure modes. These matter more than usual because audit logs are often a compliance control:
Ramp-up. Non-trivial and non-transferable. The API surface (ezcEventLog, writer configuration arrays, message classes) is unfamiliar to engineers raised on PSR-3 and will require reading source rather than documentation, since documentation for an archived project is sparse and stale. Budget onboarding time for whoever owns the adapter, and accept that the knowledge leaves with them.
TPM recommendation. Do not adopt as a production dependency. The score of 0.16, 2 stars, 0 dependents, and an unresolved license are three independent stop signals, and the package solves a problem that Monolog plus a custom handler solves with maintained, PHP-8-native code. Use it, if at all, as a reference design for an audit-log schema — its field model is sensible — and implement the equivalent on Laravel's own logging and queue primitives. If a stakeholder insists on a formal evaluation, gate it on the license determination and the PHP compatibility spike, both of which can be resolved in under three days and either of which is likely to end the discussion.
How can I help you explore Laravel packages today?