记录器
最简单、快速的方法是使用 Laravel 提供的开箱即用的记录器。
您可以通过添加类似于以下的代码行来跟踪用户:
Log::info('Showing user profile for user: '.$id);
Run Code Online (Sandbox Code Playgroud)
$id 是哪里
$user = Auth::user();
Run Code Online (Sandbox Code Playgroud)
或者为了使其干燥,创建一个静态方法以在您的应用程序中重用:
public static function trackUser($message){
$user = Auth::user();
Log::info('Showing user profile for user: '.$user->id);
}
Run Code Online (Sandbox Code Playgroud)
扩展它以根据需要添加更多数据。
有关 Laravel 记录器的更多信息,请访问:
https://laravel.com/docs/5.2/errors#logging
事件日志/修订
如果您还想跟踪系统中的实体,您可能还需要考虑事件日志之类的东西:
我过去使用过这个库: https: //github.com/VentureCraft/revisionable,它非常适合我的目的。
每当修改、创建或删除实体时,它都会在修订表中插入一条记录,其中包含先前值和新值的序列化值。
您将需要设置您的实体。这是我如何在实体上设置它的示例:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Sofa\Revisionable\Laravel\RevisionableTrait;
use Sofa\Revisionable\Revisionable;
class Invoice extends Model implements Revisionable {
use RevisionableTrait;
protected $table = 'invoices';
protected $fillable = ['po_id', 'file_name', 'charges', 'customer', 'company', 'notes', 'tax', 'created_by'];
protected $revisionPresenter = 'App\Presenters\InvoicePresenter';
public function po()
{
return $this->belongsTo('App\PO');
}
public function transactions()
{
return $this->hasMany('App\Transaction');
}
}
Run Code Online (Sandbox Code Playgroud)
之后,您将能够跟踪实体上的更改,而无需在代码中执行任何额外操作。
事件溯源
事件溯源会给您的应用程序带来很多复杂性,但它会解决很多问题。通过实现此模式,您不仅能够记录用户在系统中执行的操作,还可以随着时间的推移跟踪每个实体。这是通过仅在事件发生时存储事件并通过运行所有事件来重新创建实体来实现的。这会影响性能,但可以通过将此模式与物化视图模式相结合来解决。这可以为您的应用程序添加最终的一致性。
请确保使用此模式确实有价值,否则您(和您的团队)将感受到复杂性的痛苦