Laravel Activity Log操作日志擴展包
簡介
Laravel Action Logs操作日志記錄Laravel Activity Log
很多數據管理員都想記錄他們用戶的所有活躍記錄。這個包可以很方便的記錄你的用戶何時何地的創建、更新實體的記錄。外加,現在這個包還可以記錄多個版本的實體間數據的變更。
優勢
- 簡單的實體實現
- 記錄所有創建、更新實體的用戶和次數
- 支持記錄自定義信息(登錄、登出等)
福利彩蛋:沒有好玩的 API 接口?上百款免費接口等你來,免費 API,免費 API 大全
安裝
安裝組件
composer require spatie/laravel-activitylog
發布配置文件
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="config"
數據遷移文件
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="migrations"
數據遷移
php artisan migrate
.env配置數據庫連接
新版本添加了日志數據庫連接配置,如有需要可以自定義連接,否則會適用系統默認的數據庫連接
ACTIVITY_LOGGER_DB_CONNECTION=connection
用法
基礎用法
擴展基本使用,直接在想記錄日志的地方條用改方法,比如登錄成功或失敗的時候需要記錄下登錄日志
activity()->log('Look mum, I logged something');
可以使用performedOn方法設置日志是在哪個對象上執行的操作(例如Users Model)
activity()->performedOn(new User())->log('edited');
你可以通過使用causedBy來設置誰或者什么原因觸發了這個活動:這里的model和conentModel沒有必然的聯系, m o d e l 可以是任意一個 m o d e l 對象,也可以是用戶主鍵 I D ;只能說是某個用戶或某個業務觸發了 model可以是任意一個model對象,也可以是用戶主鍵ID ;只能說是某個用戶或某個業務觸發了 model可以是任意一個model對象,也可以是用戶主鍵ID;只能說是某個用戶或某個業務觸發了someContentModel對象的操作
如果這里不指定causedBy 那么日志將會自動默認值User model當前登錄的用戶
如果不想關聯日志觸發者的話,可以使用causedByAnonymous()忽略記錄
activity()->causedBy($model)->performedOn($someContentModel)->log('edited');
您可以使用withProperties主動向活動添加任何想要的屬性:記錄在properties
activity()->causedBy($model)->performedOn($someContentModel)->withProperties(['key' => 'value'])->log('edited');
日志創建時間設置:createdAt(now()->subDays(10))日志時間設置為10天前
activity()->causedBy($model)->performedOn($someContentModel)->withProperties(['key' => 'value'])->createdAt(now()->subDays(10))->log('edited');
可以使用tap()方法在保存活動之前填充屬性并添加自定義字段:如在日志基礎上添加客戶端Ip字段,首先數據庫添加字段,然后通過tap方式設置ip
activity()->causedBy($model)->performedOn($someContentModel)->withProperties(['key' => 'value'])->createdAt(now()->subDays(10))->tap(function(Activity $activity) {$activity->ip = request()->ip();})->log('edited');
日志清理
日志清理命令:需要config配置中設置delete_records_older_than_days保留日志天數
php artisan activitylog:clean
也可以通過任務定時清理
//app/Console/Kernel.phpprotected function schedule(Schedule $schedule)
{$schedule->command('activitylog:clean')->daily();
}
清理特定名稱的日志
php artisan activitylog:clean my_log_channel
命令執行的時候可以添加時間參數:
php artisan activitylog:clean --days=7
福利彩蛋:沒有好玩的 API 接口?上百款免費接口等你來,免費 API,免費 API 大全