yungts97 / laravel-user-activity-log
yungts97开发的一个简单的Laravel包,用于轻松监控您的Laravel应用程序用户活动。
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.5
README
Laravel用户活动日志
yungts97/laravel-user-activity-log
是一个为Laravel 8.x提供的包,它提供易于使用的功能来记录您的Laravel应用程序用户的活动。它提供对模型事件的自动记录,无需复杂的操作。所有活动都将存储在logs
表中。
📦 环境要求
PHP
: ^8.0
Laravel
: ^8.x - ^9.0
🚀 安装
您可以通过Composer安装此包
composer require yungts97/laravel-user-activity-log
该包将自动注册服务提供者。
之后,我们还需要执行以下命令来完成安装。
php artisan user-activity-log:install
✨ 如何使用?
此包非常简单易用。您需要做的唯一一件事是在您的模型类中添加Loggable
特性。
use Illuminate\Database\Eloquent\Model; use Yungts97\LaravelUserActivityLog\Traits\Loggable; class Post extends Model { use Loggable; // add it in here ... }
如果您有大量的模型,可能会有些麻烦。您可以为您的模型创建一个基类,并在基模型中添加Loggable
特性。
# BaseModel.php use Illuminate\Database\Eloquent\Model; use Yungts97\LaravelUserActivityLog\Traits\Loggable; class BaseModel extends Model { use Loggable; } # PostModel.php class Post extends BaseModel { ... }
如果您不希望对基模型的任何子类进行日志记录,您可以在模型中添加SkipLogging
特性来跳过记录。
use Yungts97\LaravelUserActivityLog\Traits\SkipLogging; class Post extends BaseModel { use SkipLogging; ... }
有时,您可能不想在日志中保存模型的一些属性。您可以在模型中添加$log_hidden
属性。
use Yungts97\LaravelUserActivityLog\Traits\SkipLogging; class Post extends BaseModel { public $log_hidden = ['created_at', 'description']; ... }
您可以使用Yungts97\LaravelUserActivityLog\Models\Log
模型检索所有活动。
Log::all();
但是,您可以通过这种方式从模型中获取活动日志。
$post->logs; // get all model's logs $post->log; // get the latest model's log $post->logs()->where('log_type', 'edit')->get(); // get filtered logs
您可以为edit
事件日志指定模式。目前有两种模式:simple
/full
。默认模式是full
。
# config/user-activity-log.php # only can choose either one of them 'mode' => 'full', # the 'full' mode record everything 'mode' => 'simple', # the 'simple' mode only record the modified columns
⚙️ 配置
您可以在config/user-activity-log.php
中更改此包的配置。
return [ # add your own middleware here (route middleware) 'middleware' => ['api', 'auth'], # user model class 'user_model' => "App\Models\User", # exclude tables for filter option 'exclude_tables' => [ 'logs', 'migrations', 'failed_jobs', 'password_resets', 'personal_access_tokens', ], # events to log 'events' => [ 'create' => true, 'edit' => true, 'delete' => true, 'retrieve' => false, 'login' => true, 'logout' => true ], # the mode is only for 'edit' event log # the 'simple' mode only record the modified columns # the 'full' mode record everything # supported mode => 'simple' / 'full' 'mode' => 'full', # timezone for log date time (Change to your region time zone, or any other variation of the timezone key in .env) # UTC is the default the time zone being recorded. # define your timezone to have the accurate logs time and filtered record (Especially filtered by date time) 'timezone' => env('APP_TIMEZONE','UTC') ];
🐣 API路由
日志过滤的可用参数
例如:http://example.com/api/logs?page=1&itemsPerPage=10&userId=517
📬 示例响应
/logs
{ "current_page": 1, "data": [ { "id": 77, "user_id": 942, "log_datetime": "2022-01-22T05:56:57.000000Z", "table_name": null, "log_type": "login", "request_info": { "ip": "192.121.0.56", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36" }, "data": null, "current_data": null, "humanize_datetime": "17 seconds ago", "user": { "id": 1, "name": "User 1", } }, ], "first_page_url": "https:///api/logs?page=1", "from": 1, "last_page": 1, "last_page_url": "https:///api/logs?page=1", "links": [ { "url": null, "label": "« Previous", "active": false }, { "url": "https:///api/logs?page=1", "label": "1", "active": true }, ], "next_page_url": null, "path": "https:///api/logs", "per_page": "10", "prev_page_url": null, "to": 10, "total": 1 }
/logs/filter-options
{ "table_names": [ "posts", "users", ], "log_types": [ "create", "edit", "delete", "login", "logout" ] }
/logs/77
{ "id": 77, "user_id": 942, "log_datetime": "2022-01-22T05:56:57.000000Z", "table_name": null, "log_type": "login", "request_info": { "ip": "192.121.0.56", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36" }, "data": null, "current_data": null, "humanize_datetime": "17 seconds ago", "user": { "id": 1, "name": "User 1", } },
🎩 Artisan命令
✒️ user-activity-log:clean
的选项
⚠️ 注意:
默认情况下,如果没有应用任何选项,则为--day=7
📃 许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。