安装 laravel-activitylog 包并发布配置文件,运行迁移创建 activity_log 表;2. 在模型中使用 LogsActivity trait 指定需记录的字段;3. 可通过 activity() 手动记录用户行为;4. 使用 Activity 模型查询操作记录;5. 在 Blade 模板中展示日志信息。该包可实现模型变更自动追踪与自定义操作记录,适用于系统审计。

在 Laravel 项目中,Spatie 的 laravel-activitylog 是一个非常流行的包,用于记录模型的增删改操作或自定义用户行为。它能自动跟踪 Eloquent 模型的变化,并将操作记录存储到数据库中,便于后续审计和监控。
1. 安装 laravel-activitylog 包
使用 Composer 安装 Spatie 的 activitylog 包:
composer require spatie/laravel-activitylog安装完成后,可选择性地发布迁移文件和配置文件:
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="migrations" php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="config"然后运行迁移,创建 activity_log 表:
php artisan migrate2. 配置需要记录的模型
在需要记录操作的 Eloquent 模型中使用 LogsActivity trait,并指定要记录的字段。
例如,在 User 模型中记录用户的更新操作:
use Spatie\Activitylog\Traits\LogsActivity;class User extends Authenticatable
{
use LogsActivity;
// 指定记录的属性
protected $fillable = ['name', 'email', 'password'];
// 记录哪些字段的变更
protected static $logAttributes = ['name', 'email'];
// 设置日志名称(可选)
protected static $logName = 'user';
// 是否记录属性的旧值和新值
protected static $logAttributesToIgnore = ['updated_at'];
// 是否在无变化时也记录
protected static $submitEmptyLogs = false;
}
3. 手动记录用户活动
除了自动记录模型变更,你还可以手动记录用户行为,比如登录、退出、访问页面等。
在控制器中使用 activity() 辅助函数:
// 记录一次用户操作activity()
->causedBy(auth()->user()) // 操作人
->performedOn($someModel) // 操作对象(可选)
->withProperties(['action' => 'export_data']) // 附加信息
->log('用户导出了报表');
也可以不绑定模型:
activity()->log('用户登录系统');4. 查询活动记录
你可以通过 Activity model 查询所有记录:
use Spatie\Activitylog\Models\Activity;$activities = Activity::all();
按用户筛选:
$activities = auth()->user()->activities;按日志类型筛选:
$activities = Activity::forSubject($post)->get(); // 获取某篇文章的操作记录5. 在 Blade 中展示操作记录
将 $activities 传入视图后,可以这样展示:
@foreach($activities as $activity){{ $activity->causer ? $activity->causer->name : '系统' }}
在 {{ $activity->created_at }}
执行了: {{ $activity->description }}
详情: {{ json_encode($activity->properties) }}
@endforeach
基本上就这些。配置好之后,大部分模型操作会自动记录,关键操作也可以手动补充。这个包灵活且稳定,适合用于后台管理系统做操作审计。










