watchedModels as $model) { Event::listen("eloquent.created: {$model}", function ($instance) use ($logger) { $this->logModel($logger, $instance, 'created'); }); Event::listen("eloquent.updated: {$model}", function ($instance) use ($logger) { $this->logModel($logger, $instance, 'updated'); }); Event::listen("eloquent.deleted: {$model}", function ($instance) use ($logger) { $this->logModel($logger, $instance, 'deleted'); }); } } private function logModel(ActivityLogger $logger, $model, string $action): void { if (!config('system.security.audit_log', true)) { return; } $changes = []; if ($action === 'updated') { foreach ($model->getChanges() as $key => $newValue) { if (in_array($key, ['updated_at', 'created_at'], true)) { continue; } $changes[$key] = [ 'old' => $model->getOriginal($key), 'new' => $newValue, ]; } } else { $changes = $model->getAttributes(); } $logger->audit([ 'action' => "{$action}_model", 'model' => class_basename($model), 'model_fqcn' => get_class($model), 'model_id' => $model->getKey(), 'changes' => $changes, 'route' => request()->route()?->getName(), 'request_id' => app()->bound('audit.request_id') ? app('audit.request_id') : null, ]); } }