Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама
Новини 26 червня 2026

Yammi Audit Log: пакет для відстеження змін через черги та фонові завдання

Більшість пакетів для аудиту можуть показати, коли поле змінилося і хто його змінив. Але вони втрачають контекст, коли зміна відбувається через дві черги після запиту, що її ініціював. Yammi Audit Log від RomaLytar вирішує цю проблему: поряд зі значеннями "до" і "після" він записує, хто виконав зміну, хто її ініціював, та correlation ID, який пов'язує запит, завдання, команду або заплановане завдання в єдиний ланцюг.

Аудит без змін у моделях

Немає потреби додавати трейти, імплементувати інтерфейси чи реєструвати обсервери. Після встановлення пакета та виконання міграцій записи Eloquent автоматично потрапляють в аудит-лог для всіх моделей:

User::first()->update(['name' => 'Eric']);

Це оновлення вже зафіксоване в журналі аудиту без будь-яких змін у моделі User. За замовчуванням захоплюються всі моделі, але можна перемкнути режим на opt-in у config/audit-log.php, якщо потрібно відстежувати лише певний набір:

'capture'   => ['mode' => env('AUDIT_LOG_CAPTURE_MODE', 'all')],  // all | opt_in
'retention' => ['days' => env('AUDIT_LOG_RETENTION_DAYS', 180)],
'write'     => ['async' => env('AUDIT_LOG_WRITE_ASYNC', false)],

Важливе застереження: пакет підключається до подій моделей Eloquent, тому прямі оновлення через Query Builder не захоплюються автоматично і мають бути записані явно.

Збереження інформації про актора через черги

Це та частина, яка виділяє Yammi серед типових рішень для аудиту. Коли користувач диспатчить завдання, яке пізніше модифікує модель, звичайний аудит-трейл приписує зміну воркеру черги, бо саме цей процес виконав запис. Yammi проносить оригінальну ідентичність через весь ланцюг, тому запис розрізняє актора, який виконав зміну, та особу, яка її ініціювала. Correlation ID потім групує всі записи, що належать до одного робочого процесу, дозволяючи відтворити каскад змін, що охоплює контролер, чергове завдання та заплановану команду, замість того щоб розглядати їх як непов'язані рядки.

Записаний контекст також відзначає, де відбулася зміна - чи то HTTP-запит, чергове завдання, artisan-команда чи планувальник, що корисно, коли та сама модель записується з кількох точок входу.

Створений, щоб не заважати

Шлях запису спроектований так, щоб аудит не призводив до відмови запиту чи уповільнення. Кожна зміна - це один insert плюс пакетний індекс полів, що змінилися, і ці записи полів потрапляють у виділену індексовану таблицю, тому пошук за полем не означає сканування JSON-колонок. Записи можна відправляти в чергу, якщо не хочеться платити за них у реальному часі:

'write' => ['async' => env('AUDIT_LOG_WRITE_ASYNC', false)],

Шлях захоплення також fail-open, тому якщо сам запис аудиту видає помилку, базова операція все одно проходить замість того, щоб забрати з собою весь запит.

Опціональні рівні криміналістики та відповідності вимогам

Поза основним трейлом, Yammi постачається з набором підсистем, які залишаються неактивними, поки їх не увімкнути. Режим цілісності додає ланцюг хешів, стійкий до підробки, щоб можна було виявити постфактум, чи були змінені збережені записи, а перегляд "машини часу" відтворює стан запису в минулому. Є інструменти GDPR для звітів суб'єктів та обробки збереження, виявлення аномалій, стримінг до SIEM, сповіщення в Slack та вебхуки, підтримка мультитенантності. Опціональна панель керування доступна через окрему команду:

composer require romalytar/yammi-audit-log-laravel
php artisan migrate
php artisan audit-log:ui enable

Панель та функції цілісності, криміналістики та відповідності вимогам - всі opt-in, що тримає базову установку близькою до простого журналу змін і дозволяє додавати важчий механізм лише там, де додаток дійсно цього потребує.

Сумісність та підтримка

Yammi працює на PHP 8.1+ та Laravel від 9 до 13 версії, підтримує будь-яку базу даних, з якою працює Laravel. Документацію та вихідний код можна знайти на GitHub.

38

Читати в документації

Коментарі

Увійдіть, щоб залишити коментар

Будьте першим, хто залишить коментар!

Читайте також

PayZephyr
Новини 12 вересня 2026

PayZephyr: Єдиний API для роботи з Stripe, Paystack та PayPal

PayZephyr - Laravel-пакет від Nwaneri Chukwunyere Kenneth, який об'єднує вісім платіжних провайдерів під одним зручним API. Підтримує автоматичне перемикання, захист від подвійної оплати, підписки та повернення коштів.

2
Laravel Telescope
Новини 11 вересня 2026

Artisan-команди для дебагу в Laravel Telescope 5.24.0

Laravel Telescope 5.24.0 додає дві нові Artisan-команди для роботи із записами із терміналу. Тепер можна переглядати запити, винятки, джоби та запити до бази даних без відкриття веб-інтерфейсу, а також отримувати дані у форматі JSON для скриптів та AI-агентів.

3

Вакансії за темою

Гарант-Інфо
4 дні тому

Middle PHP Developer (Laravel)

Middle PHP Developer для міжнародного B2B-продукту у телекомунікаціях. Розробка нового функціоналу на PHP 8.x/Laravel, підтримка кодової бази, робота з REST API, платіжними інтеграціями та MySQL. Вимоги: 2+ років комерційного досвіду PHP, впевнене знання Laravel, ООП, SOLID, тестування (PHPUnit/Pest), Git, Docker.

Full Stack Developer (PHP, React, Middle, Middle+)

Full Stack розробник для підтримки та розвитку аналітичного продукту перевірки контрагентів. Робота зі складною бізнес-логікою, базами даних та інтеграцією AI-рішень. Стек: PHP 8.x (Laravel/Symfony), React, MySQL, REST API. Вимоги: 3+ років комерційного досвіду, глибоке розуміння SQL, Git, Docker, CI/CD, Linux, OWASP.

Програміст PHP (інтерн)

Вакансія на посаду інтерна PHP розробника для початківців з теоретичною базою ООП та базовими знаннями PHP. Потрібні навички Git/GitHub, власні проєкти. Стажування в офісі під керівництвом менторів з перспективою переходу на посаду Junior разробника.

Пакети за темою

Bagisto

bagisto/bagisto

Bagisto — це платформа для електронної комерції, побудована на Laravel. Вона надає готове рішення для створення та управління інтернет-магазинами з підтримкою каталогу товарів, замовлень, платежів та клієнтів.

28,086 v2.5.0-beta1 13 25

Lang

laravel-lang/lang

Список 126 мов для Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark та Laravel UI.

7,774 15.34.8 11