Log Activity(將所有活動儲存在 activity_log 表中)

spatie/laravel-activitylog

介紹

spatie/laravel-activitylog 是一個 Laravel 套件,用來自動記錄模型或自訂操作的「活動紀錄 / 操作日誌」,例如:

  • 誰新增了某筆資料
  • 哪個使用者更新了哪個欄位
  • 哪個模型被刪除了
  • 自訂紀錄使用者登入、導出 Excel、審核資料…等

套件的主要功能包含:

  • 自動記錄 Eloquent 模型的 createdupdateddeleted 操作
  • 記錄欄位變更內容(Before / After)
  • 可客製「誰做了什麼事、對什麼模型」
  • 支援自訂事件,例如:匯出、登入、點擊等自訂行為

安裝

composer require spatie/laravel-activitylog

# 發佈 migration
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="activitylog-migrations"

# 執行 migration 建立 activity_log 表
php artisan migrate

基本使用方法

模型中啟用日誌功能

use Spatie\Activitylog\Traits\LogsActivity;

class Post extends Model
{
    use LogsActivity;

    protected static $logAttributes = ['title', 'content'];
    protected static $logName = 'post';
    protected static $logOnlyDirty = true; // 只記錄變更過的欄位
}

自動記錄內容

$post = Post::create(['title' => 'Hello', 'content' => 'World']);
$post->update(['title' => 'Hello Laravel']);
$post->delete();

// 套件會自動在 activity_log 表中新增紀錄,包含:
// - 操作的使用者(預設為 auth()->user())
// - 操作的模型與 ID
// - 操作類型(created、updated、deleted)
// - 欄位變更前後值(before / after)

查詢操作紀錄

use Spatie\Activitylog\Models\Activity;

Activity::all(); // 取得所有操作紀錄

$post->activities; // 取得某個模型的歷史紀錄

記錄自訂事件

activity()
    ->causedBy(auth()->user())
    ->performedOn($post)
    ->withProperties(['action' => 'export'])
    ->log('匯出文章');

// 範例紀錄
// User Jack 匯出文章 on post#12
// properties: { action: 'export' }

指定紀錄使用者

activity()->causedBy(User::find(1))->log('系統管理員操作');

支援選項

選項 說明
$logAttributes 要記錄的欄位
$logOnlyDirty 是否只記錄有變動的欄位
$logName 設定活動類型名稱(log name)
$recordEvents 自訂要記錄的事件(例如只記錄 created)
activity() 記錄自訂操作

如需進一步設定細節或客製記錄格式,可參考官方文件:
👉 https://spatie.be/docs/laravel-activitylog