abdulbaset/activity-tracker

适用于Laravel项目的综合活动跟踪器。

1.0.0 2024-07-27 04:26 UTC

This package is auto-updated.

Last update: 2024-09-28 05:05:54 UTC


README

Thumbnail

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命令

  1. 运行特定表的迁移
php artisan migrate --path=vendor/abdulbaset/activity-tracker/src/Migrations
  1. 回滚特定迁移
php artisan migrate:rollback --path=vendor/abdulbaset/activity-tracker/src/Migrations
  1. 刷新特定表的迁移
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文件以获取详细信息。