wedevelopnl/audit-log
A Laravel package for recording audit trails of your application's data. It logs model events such as create, update, and delete, capturing the changes made, the user responsible, and timestamps, so you can review activity and keep a reliable history of modifications to your Eloquent models.
RecordReader (with new indexed filtering on channel, actor_label, subject_label for responsive dashboards).NAN, INF, invalid UTF-8) before recording means a malformed audit payload can no longer fail the flush and roll back the audited business change — a key product decision that audit must never break core transactions.kernel.terminate/console.terminate for recorded-but-unflushed records closes a silent-data-loss risk, making it safer to promise "every action is logged" to customers.AuditEntry::fromRecord() allows building detached audit entries for exports, external SIEM feeds, or customer-facing reports without coupling to the persistence layer.Consider adoption when:
Look elsewhere when:
RecordReader::actors() labeling behavior and relocates NullSubjectLabeller (namespace move). The SubjectLabeller alias is preserved, but the actor-labeling change can shift reporting output and should be validated against existing dashboards.To executives: This package gives us a credible, maintained audit trail — the "who changed what and when" record regulators and enterprise buyers expect — without a costly custom build. The 6.0.0 release hardens it in two ways that matter commercially: audit records can no longer be silently lost at shutdown (errors are now logged), and malformed audit data can no longer break a customer's transaction by rolling it back. That translates to lower compliance risk and fewer "we lost the log" incidents.
To engineering: Mature, ADR-documented audit log with Laravel/Symfony lifecycle hooks. 6.0.0 adds terminate-time detection of unflushed records, upfront JSON-encodability validation (prevents flush-time rollbacks), reader indexes on channel/actor_label/subject_label, and AuditEntry::fromRecord() for detached entries. Two changes require attention on upgrade: RecordReader::actors() now labels actors by most-recent record (verify against existing reports) and NullSubjectLabeller moved to the Recording namespace (alias unchanged). Treat it as the audit primitive, not an event-sourcing engine.
To product/design: Unlocks change-history timelines, admin activity feeds, and "last modified by" affordances, backed by indexed queries that keep those views fast.
How can I help you explore Laravel packages today?