mohamedhekal / audittrail
Compliance-oriented audit logs for Laravel with masking, retention, and searchable model activity
v0.1.0
2026-07-16 14:23 UTC
Requires
- php: ^8.2
- illuminate/auth: ^11.0|^12.0
- illuminate/console: ^11.0|^12.0
- illuminate/database: ^11.0|^12.0
- illuminate/events: ^11.0|^12.0
- illuminate/http: ^11.0|^12.0
- illuminate/routing: ^11.0|^12.0
- illuminate/support: ^11.0|^12.0
Requires (Dev)
- laravel/pint: ^1.18
- orchestra/testbench: ^9.0|^10.0
- pestphp/pest: ^3.0
- pestphp/pest-plugin-laravel: ^3.0
- phpstan/phpstan: ^2.0
README
Search terms: laravel, audit, activity-log, compliance, gdpr, security, php, laravel-package, auditing, activity, model-events.
Compliance-oriented audit logs for Laravel: model diffs, actor/IP context, sensitive-field masking, retention, and searchable history.
Installation
composer require mohamedhekal/audittrail php artisan vendor:publish --tag=audittrail-config php artisan migrate
Model auditing
use Hekal\AuditTrail\Concerns\Auditable; use Illuminate\Database\Eloquent\Model; class Order extends Model { use Auditable; }
Creates created / updated / deleted audit rows with redacted secrets.
Manual events
use Hekal\AuditTrail\Facades\AuditTrail; AuditTrail::startBatch(); AuditTrail::record('invoice.voided', $invoice, oldValues: ['status' => 'open'], newValues: ['status' => 'void']); AuditTrail::endBatch();
Querying
use Hekal\AuditTrail\Models\AuditRecord; AuditRecord::query() ->forSubject($order) ->forEvent('updated') ->latest() ->get();
Commands
php artisan audittrail:purge --days=365 php artisan audittrail:export storage/audit.jsonl --event=deleted
API middleware (optional)
Route::middleware(['api', 'audittrail.api'])->group(...);
Enable with AUDITTRAIL_API_MIDDLEWARE=true.
Testing
composer install && composer test
License
MIT