Пакет spatie/laravel-activitylog используется для отслеживания действий пользователей и событий в приложении Laravel. Он сохраняет данные в таблице activity_log и поддерживает как ручное логирование, так и автоматическое отслеживание событий моделей.
Трейт HasActivity
В версии v5 появился трейт HasActivity, который объединяет ранее существовавшие LogsActivity и CausesActivity. Теперь достаточно подключить один трейт к модели, чтобы автоматически логировать события создания, обновления и удаления.
use Spatie\Activitylog\Models\Concerns\HasActivity;
class User extends Model
{
use HasActivity;
}Трейт позволяет модели одновременно выступать источником события и его инициатором. При необходимости старые трейты можно использовать отдельно.
Буферизация активности
По умолчанию каждое действие записывается отдельным SQL-запросом. В v5 добавлена буферизация, которая накапливает события в памяти и сохраняет их одним запросом после завершения ответа.
Включение через .env:
ACTIVITYLOG_BUFFER_ENABLED=trueИли через конфигурацию:
'buffer' => [
'enabled' => true,
],Буферизация работает как для автоматических событий моделей, так и для ручных вызовов activity()->log().
Особенности поведения:
Текущие записи не получают ID до момента сохранения в базу.
Буфер автоматически очищается между запросами, включая использование с Laravel Octane.
В очередях записи сохраняются после завершения или падения задания.
Default Causer
Метод Activity::defaultCauser() позволяет задать пользователя или модель по умолчанию, от имени которой фиксируются действия.
Activity::defaultCauser($adminUser, function () use ($post) {
activity()->performedOn($post)->log('published');
activity()->performedOn($post)->log('notified subscribers');
});Можно задать глобальный контекст или ограничить его конкретным колбэком.
Колонка attribute_changes
Изменения атрибутов теперь сохраняются в отдельной колонке attribute_changes, а не в JSON-поле properties.
// v4
$activity->changes();
// v5
$activity->attribute_changes;Это упрощает доступ к данным и делает структуру хранения более явной.
Изменения и несовместимости
В версии v5 переименованы методы и настройки для унификации API. Например, activities() заменён на activitiesAsSubject(), а withoutLogs() на withoutLogging().
Удалены системы batch и pipe, включая LogBatch и Activity::batch(). Также исключены параметры конфигурации table_name и database_connection.
Для работы требуется PHP 8.4 и Laravel 12.