Laravel’de kullanıcı işlemlerini loglamak

Laravel ile geliştirdiğiniz projenizde bazı işlemlerin log’lanmasına ihtiyaç duyabilirsiniz. Kayıt oluşturma, düzenleme, silme gibi işlemlerin hangi kullanıcı tarafından gerçekleştiğini bilmek önemli. Bu işlem için ben activityLog kütüphanesi kullanıyorum. Kullanımı oldukça basit olmasına karşın oldukça iş görüyor. Lafı fazla uzatmadan nasıl kullanıldığına geçmek istiyorum.

activityLog kütüphanesini projenize dahil etmek için, aşağıdaki composer kodunu terminalden çalıştırın.

Laravel 5.8 için

composer require spatie/laravel-activitylog "^3.9"

Laravel 5.8 üzeri için

composer require spatie/laravel-activitylog

Composer sayesinde kurulum yapıldı ve composer.json güncellendi. Sıra geldi laravel’e tanıtmaya.

php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="migrations"

Yukarıdaki artisan kodu sayesinde provider’ı düzenlemiş ve Activitylog için gerekli olan activity_log tablosunun migration dosyasını hazırlamış olacaksınız.

php artisan migrate

Komutu ile logları tutacağımız activity_log tablosunu oluşturun.

activity_log
id Primary Key
log_name Yapılan Işlem (Created, Updated, Deleted , …)
description Url
subject_id Işlem Yapılan Verinin Primary Key'i
subject_type Işlem Yapılan Model
causer_id Işlem Gerçekleştiren User Id
causer_type User Model
properties Yapılan Işlemin Verisi
created_at Oluşturulma Zamanı
updated_at Düzenlenme Zamanı

Sıra geldi event‘lerin takip edileceği observer‘ı hazırlamaya.

php artisan make:observer ActivityLogObserver

Komut sayesinde app/Observers/ActivityLogObserver.php dosyası oluşturulmuş olacak. Oluşturulan ActivityLogObserver.php dosyasını aşağıdaki gibi düzenleyin.

namespace App\Observers;

use Illuminate\Support\Facades\Auth;

class ActivityLogObserver
{
    protected function log($model, $useLog)
    {
        $getDirty = $model->getDirty();
        unset($getDirty['created_at']);
        unset($getDirty['updated_at']);
        // unset($getDirty['deleted_at']);

        activity()
            ->performedOn($model)
            ->causedBy(Auth::user())
            ->useLog($useLog)
            ->withProperties($getDirty)
            ->log(url()->previous());
    }


    public function created($model)
    {
        $this->log($model, 'Created');
    }


    public function updated($model)
    {
        $this->log($model, 'Updated');
    }

    public function deleted($model)
    {
        $this->log($model, 'Deleted');
    }
}

Tamamlamak için son bir kaç işlem kaldı. ActivityLogObserver.php dosyasını tanıttığımız tüm modeller activityLog tarafından log’lanmaya başlar. aşağıdaki modele eklemeniz yeterli olacaktır.

public static function boot()
{
    parent::boot();
    parent::observe(new ActivityLogObserver);
}

Söz konusu Model’de yapılan created, updated ve deleted işlemleri activity_log tablosuna kaydedilir.

Her model için tek tek uğraşmak yerine BaseModel oluşturup loglama yapılacak modelleri BaseModel‘den extend ederek çalışmakta fayda var. BaseModel oluşturmak için:

php artisan make:model Models/BaseModel

Models/BaseModel.php dosyasını aşağıdaki gibi düzenleyin.

namespace App\Models;

use App\Observers\ActivityLogObserver;
use Illuminate\Database\Eloquent\Model;

class BaseModel extends Model
{

    public static function boot()
    {
        parent::boot();
        parent::observe(new ActivityLogObserver);
    }
}

İşlemlerini takip etmek istediğiniz Model’i BaseModel’den extend edin.

class test extends BaseModel

geçmiş olsun 🙂 umarım işinize yaramıştır.

2 Yorumlar

Yorum Ekle

E-posta hesabınız yayımlanmayacak.

Gerçek kişi doğrulaması
4 + 2 =