记录器
最简单快速的方法是使用 Laravel 提供的开箱即用的记录器。
你可以通过添加一行类似这样的代码来跟踪用户:
Log::info('Showing user profile for user: '.$id);
$id 在哪里
$user = Auth::user();
或者干脆创建一个静态方法以在您的应用程序中重用:
public static function trackUser($message){
$user = Auth::user();
Log::info('Showing user profile for user: '.$user->id);
}
扩展它以根据需要添加更多数据。
有关 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');
}
}
之后,您将能够跟踪实体的更改,而无需在代码中执行任何额外操作。
事件溯源
事件溯源会给您的应用程序带来很多复杂性,但它会解决很多问题。通过实施这种模式,您不仅可以记录用户在您的系统中所做的事情,还可以随着时间的推移跟踪每个实体。这是通过仅在事件发生时存储事件并通过运行所有事件来重新创建实体来实现的。这会影响性能,但可以通过将此模式与物化视图模式相结合来解决。这可以为您的应用添加最终的一致性。
请确保使用这种模式确实有价值,否则您(和您的团队)将感受到复杂性带来的痛苦