Логирование активности пользователей в 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.

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

Рекомендательные технологии Подробнее
Разработка и инструменты 5 месяцев назад

Как ускорить Laravel-приложение: параллельные API-запросы через Http::pool и Http::batch

Статья объясняет, как ускорить Laravel-приложения, выполняя API-запросы параллельно с помощью Http::pool и Http::batch. Приводятся практические примеры, обработка ответов и советы по таймаутам.

Разработка и инструменты 5 месяцев назад

Laravel: Eager loading может выполнить запрос не туда

Тонкость применения жадной загрузки в Laravel при работе с моделями, которые живут в разных базах данных. Без явного указания protected $connection Laravel может попытаться выполнить запрос к неверной базе, что приведёт к ошибкам.

Разработка и инструменты 5 месяцев назад

Прямая итерация Fluent-объектов в Laravel

Обзор обновления Laravel, в котором Fluent-объекты получили поддержку прямой итерации через Iterable-контракт. Объясняется, почему это улучшение упрощает код и делает работу с данными более естественной.