abdulbaset / activity-tracker
适用于Laravel项目的综合活动跟踪器。
Requires
- php: ^7.4|^8.0
- illuminate/support: ^8.0|^9.0|^10.0
README
Activity Tracker是Laravel项目的综合日志记录包,旨在跟踪应用程序内的各种活动。它提供了记录实体创建、更新、删除和检索等事件的函数,以及用户ID、IP地址、设备类型等附加上下文信息。
目录
安装
安装
您可以通过Composer安装Activity Tracker包。在您的终端运行以下命令
composer require abdulbaset/activity-tracker
要更新您的Laravel项目中的Activity Tracker包,您可以使用Composer的update命令。以下是操作方法
composer update abdulbaset/activity-tracker
在您的Laravel项目目录中运行update命令后,Composer将检查abdulbaset/activity-tracker包及其依赖项的更新。如果有新版本可用,Composer将下载并安装它,更新您的项目。
配置
安装包后,使用以下命令发布配置文件
php artisan vendor:publish --provider="Abdulbaset\ActivityTracker\Providers\ActivityTrackerServiceProvider"
您可以通过修改config/activity-tracker.php文件来配置Activity Tracker包。此文件允许您指定设置,例如日志表名、日志方法(数据库或文件)、日志文件路径等。
return [ 'enabled' => env('ACTIVITY_TRACKER_ENABLED', true), 'table_name' => 'activity_logs', 'log_method' => 'database', // Options: 'database', 'file' 'log_file_path' => storage_path('logs/activity_logs.log'), 'log_only_changes' => true, 'log_login_auth' => true, 'log_logout_auth' => true ];
迁移
安装包后,您需要运行迁移以创建所需的数据库表。为此,请使用以下Artisan命令
- 运行特定表的迁移
php artisan migrate --path=vendor/abdulbaset/activity-tracker/src/Migrations
- 回滚特定迁移
php artisan migrate:rollback --path=vendor/abdulbaset/activity-tracker/src/Migrations
- 刷新特定表的迁移
php artisan migrate:refresh --path=vendor/abdulbaset/activity-tracker/src/Migrations
用法
有多种方法可以将Activity Tracker包集成到您的Laravel应用程序中,允许您跟踪系统内的各种活动和事件。这三种方法提供了将Activity Tracker包集成到您的Laravel应用程序中的灵活性,使您可以选择最适合项目需求的方法。
直接记录事件
要在应用程序代码中直接记录事件,您可以使用包提供的ActivityTracker
外观。以下是如何记录事件的示例
use Abdulbaset\ActivityTracker\Facades\ActivityTracker; ActivityTracker::event(string $event ,string $description ,array $otherInfo); ActivityTracker::retrieved(Model::class $model ,string $description ,array $otherInfo); ActivityTracker::visited(string $description ,array $otherInfo); ActivityTracker::log(Model::class $model, string $event ,string $description ,array $otherInfo);
在这个例子中,Model::class代表被记录的实体,'retrieved'是事件类型,'Entity retrieved'是事件描述,而['example_key' => 'example value']是与事件关联的附加信息。
使用特性
应用了ActivityTrackerTrait特性后,您可以直接在模型实例上调用logCreated、logUpdated和logDeleted等方法
// ExampleModel.php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Abdulbaset\ActivityTracker\Traits\ActivityTrackerTrait; // Adjust namespace based on your package structure class ExampleModel extends Model { use ActivityTrackerTrait; }
使用观察者
Activity Tracker观察者允许您在执行某些操作时自动记录事件。要使用Activity Tracker观察者
namespace App\Providers; namespace Abdulbaset\ActivityTracker\Observers\ActivityTrackerObserver; use App\Models\ExampleModel; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. */ public function boot(): void { ExampleModel::observe(ActivityTrackerObserver::class); } }
示例
有关用法示例和代码片段。
- 如果您需要在控制器中使用以下示例。
namespace App\Http\Controllers\Blog; use App\Http\Controllers\Controller; use Abdulbaset\ActivityTracker\Facades\ActivityTracker; use App\Models\Blog; class BlogController extends Controller { public function index() { $blogs = Blog::all(); // set visited event for who visited the blogs page ActivityTracker::visited($description = 'Auth visited the blogs page', $otherInfo = ['local' => app()->getLocale()]); return view('blog.index'); } public function show(string $id) { $blog = Blog::find($id); // set retrieved event for who gets the blog ActivityTracker::retrieved($model = $blog, $description = 'Auth show blog', $otherInfo = ['local' => app()->getLocale()]); return view('blog.show'); } public function store(Request $request) { $blog = Blog::create([ 'title' => 'Test Blog Title', 'slug' => 'test-blog-slug', ]); // set log event when you dont use the trait in blog model or observer at app provider ActivityTracker::log($model = $blog,$event = 'created' ,$description = 'blog created successfully'); return view('blog.store'); } public function update(Request $request,string $id) { $blog = Blog::findOrFail($id); $blog->update([ 'title' => 'Test Blog Title Update', ]); // set log event when you dont use the trait in blog model or observer at app provider ActivityTracker::log($model = $blog ,$event = 'updated' ,$description = 'blog updated successfully'); return view('blog.update'); } public function destroy(string $id) { $blog = Blog::findOrFail($id); // set log event when you dont use the trait in blog model or observer at app provider ActivityTracker::log($model = $blog ,$event = 'deleted' ,$description = 'blog deleted successfully'); $blog->delete(); return view('blog.destroy'); } public function export(string $id) { // your logic here ActivityTracker::event($event = 'export-excel' ,$description = 'export blogs for excel file' , ['key' => 'value']); return view('blog.destroy'); } // etc.. }
- 如果您需要在模型内部通过特性使用以下示例。
namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Abdulbaset\ActivityTracker\Traits\ActivityTrackerTrait; class Blog extends Model { use HasFactory; // tracking activity log for created, updated and deleted use ActivityTrackerTrait; protected $table = 'blogs'; protected $fillable = [ 'title', 'slug', // etc.. ]; }
- 如果您需要通过观察者使用以下示例。
namespace App\Providers; use Abdulbaset\ActivityTracker\Observers\ActivityTrackerObserver; use App\Models\Blog; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. */ public function boot(): void { // tracking activity log for created, updated and deleted Blog::observe(ActivityTrackerObserver::class); } }
- 如果您想创建自定义观察者,请按照以下示例操作。
namespace App\Observers; use App\Models\Blog; use Abdulbaset\ActivityTracker\Facades\ActivityTracker; class BlogObserver { public function created(Blog $blog) { ActivityTracker::log($blog, 'created', 'Blog created'); } public function updated(Blog $blog) { ActivityTracker::log($blog, 'updated', 'Blog updated'); } public function deleted(Blog $blog) { ActivityTracker::log($blog, 'deleted', 'Blog deleted'); } // etc.. }
并在AppServiceProvider命名空间中的boot方法内分配
namespace App\Providers; use App\Observers\BlogObserver; use App\Models\Blog; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. */ public function boot(): void { Blog::observe(BlogObserver::class); } }
功能
- 综合活动记录:跟踪各种用户操作,如模型上的创建、更新、删除等操作。
- 灵活的配置:使用如日志方法(数据库或文件)、日志文件路径等配置选项自定义日志记录行为。
- 自动登录和登出跟踪:通过可配置的选项自动记录用户登录和登出事件。
- 事件特定数据记录:记录事件特定数据,例如更新期间所做的更改、旧值和新值、IP地址、浏览器详情等。
- 支持Laravel:无缝使用该包与Laravel应用程序。
- 特性(Trait)和观察者(Observer)支持:使用提供的特性或观察者轻松将活动记录集成到您的模型中。
- 易于使用:简单的API用于记录活动,使其在您的应用程序中实现起来非常直接。
- 自定义事件记录:通过添加自定义事件监听器来扩展功能,以记录您应用程序特定的附加事件。
- 可配置:根据您的应用程序需求配置该包,包括启用或禁用特定的记录功能。
作者
活动跟踪器包由Abdulbaset R. Sayed创建 AbdulbasetRedaSayedHF@Gmail.com
贡献
欢迎贡献!如果您遇到任何问题或对改进有建议,请随时在GitHub上打开问题或提交拉取请求。
许可证
本软件包采用MIT许可 - 请参阅LICENSE文件以获取详细信息。