0

Khám phá spatie/laravel-activitylog: "Hộp đen" ghi nhận lịch sử hoạt động (Audit Trail) chuẩn mực cho hệ thống Laravel lớn

Chào anh em!

Trong các hệ thống phần mềm lớn (như hệ thống thương mại điện tử, tài chính, hay quản trị doanh nghiệp), việc ghi nhận lại dấu vết thao tác của người dùng — ai đã làm gì, vào lúc nào, thay đổi dữ liệu gì (Audit Trail) — là một yêu cầu bắt buộc vì lý do bảo mật, kiểm toán và gỡ lỗi.

Nếu tự viết một hệ thống log thủ công từ đầu bằng tay, bạn sẽ tốn rất nhiều thời gian để xử lý việc lắng nghe sự kiện của Model, lưu trữ cấu trúc JSON và truy vấn dữ liệu cũ. Rất may, cộng đồng Laravel sở hữu một "báu vật" cứu cánh cực kỳ nổi tiếng do hãng Spatie phát triển mang tên spatie/laravel-activitylog.

Hôm nay, hãy cùng mổ xẻ xem package này có gì mà được các kiến trúc sư phần mềm tin dùng trong các hệ thống lớn nhé!

1. spatie/laravel-activitylog thực chất là gì?

spatie/laravel-activitylog là một package mã nguồn mở cực kỳ mạnh mẽ cho phép bạn tự động hoặc thủ công ghi lại mọi hoạt động diễn ra trong ứng dụng Laravel vào cơ sở dữ liệu.

Nó đóng vai trò như một "hộp đen" ghi lại toàn bộ nhật ký hệ thống: Ai đã đăng nhập, ai đã tạo mới một sản phẩm, ai đã xóa một bản ghi quan trọng, hoặc dữ liệu đã thay đổi từ trạng thái nào sang trạng thái nào (Old values vs New values).

2. Những tính năng "ăn tiền" được sử dụng trong các hệ thống lớn

A. Tự động ghi log Model (Automatic Model Logging)

Thay vì phải viết code thủ công trong Controller mỗi khi có hành động thêm/sửa/xóa, bạn chỉ cần gắn trait LogsActivity vào Eloquent Model. Package sẽ tự động lắng nghe và ghi lại mọi thay đổi:

use Spatie\Activitylog\Traits\LogsActivity;
use Spatie\Activitylog\LogOptions;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use LogsActivity;

    public function getActivitylogOptions(): LogOptions
    {
        return LogOptions::defaults()
            ->logAll() // Tự động ghi nhận mọi thay đổi trên các cột của bảng
            ->logOnlyDirty() // Chỉ ghi lại những cột thực sự có thay đổi giá trị để tiết kiệm dung lượng database
            ->dontSubmitEmptyLogs(); // Không ghi log rác nếu không có trường nào thay đổi
    }
}

B. Lưu trữ thông tin chi tiết sự thay đổi (Attributes Changes)

Khi một bản ghi bị chỉnh sửa (ví dụ: cập nhật giá sản phẩm từ 100k lên 150k), bảng log của Spatie sẽ lưu lại cực kỳ chi tiết dưới dạng JSON, cho phép bạn biết chính xác:

  • Giá trị cũ trước khi sửa là gì (properties.old).
  • Giá trị mới sau khi sửa là gì (properties.attributes).

C. Gắn kết với người thực hiện hành động (Causer)

Hệ thống tự động nhận diện và liên kết log với người dùng đang đăng nhập (auth()->user()) thông qua quan hệ polymorphic, giúp bạn dễ dàng truy vấn xem chính xác tài khoản nào đã thực hiện câu lệnh thay đổi dữ liệu đó.

D. Tùy chỉnh danh tính Log (Log Name) và ghi log thủ công

Ngoài việc tự động theo dõi Model, bạn hoàn toàn có thể chủ động ghi log các sự kiện nghiệp vụ đặc thù (như đăng nhập thành công, thanh toán thất bại) thông qua cú pháp cực kỳ trực quan:

activity('auth')
    ->causedBy($user)
    ->performedOn($order)
    ->log('Người dùng đã xác nhận thanh toán đơn hàng thành công.');

3. Hướng dẫn cài đặt và cấu hình nhanh chóng

  • Bước 1: Cài đặt qua Composer
    composer require spatie/laravel-activitylog
    
  • Bước 2: Publish Migration và File cấu hình Chạy lệnh Artisan để xuất file cấu hình và bảng cơ sở dữ liệu (Migration) ra thư mục dự án:
    php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="activitylog-migrations"
    php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="activitylog-config"
    
  • Bước 3: Chạy Migration để tạo bảng activity_log
    php artisan migrate
    
    Sau khi chạy, bảng activity_log sẽ được tạo sẵn trong cơ sở dữ liệu với cấu trúc chuẩn mực, tối ưu hóa index để phục vụ việc truy vấn hàng triệu dòng log mà không làm chậm hệ thống.

Lời kết

spatie/laravel-activitylog là một tiêu chuẩn vàng trong hệ sinh thái Laravel khi cần xây dựng các tính năng Audit Trail, lịch sử giao dịch và kiểm toán hệ thống. Việc tích hợp package này giúp tiết kiệm hàng tuần lễ tự thiết kế cơ sở dữ liệu log, đồng thời mang lại sự minh bạch tuyệt đối cho các hệ thống Backend quy mô lớn!


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.