Логирование активности пользователей в Laravel с Activity Log v5

Пакет 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.

Комментарии (0)

Войдите, чтобы оставить комментарий

Похожие статьи

Осваиваем сервис-контейнер Symfony с помощью современных PHP-атрибутов

Объясняем как использовать современные PHP-атрибуты для настройки сервис-контейнера Symfony, чтобы избавиться от сложной YAML-конфигурации и сделать код более компактным и понятным.