logging
5200 yıldız

Laravel Activitylog

Geliştirici: Spatie

Uygulamanızdaki kullanıcı hareketlerini ve model değişikliklerini otomatik olarak loglayan denetim paketi.

Kurulum

Composer
composer require spatie/laravel-activitylog

Dokümantasyon & Kullanım

Markdown

Spatie Laravel Activitylog

Laravel Activitylog paketi, uygulamanızdaki kullanıcı aktivitelerini, oturum açma/kapama hareketlerini ve Eloquent modellerindeki ekleme, güncelleme ve silme (CRUD) işlemlerini otomatik veya manuel olarak veritabanında denetim (audit trail) günlüğü olarak kaydetmenizi sağlar.

Neden Tercih Edilmeli?

  • Otomatik Model Günlüğü: Modeldeki hangi alanların (eski ve yeni değerleriyle) değiştiğini otomatik olarak tespit eder ve kaydeder.
  • Aktör (Causer) İlişkisi: İşlemi gerçekleştiren kullanıcıyı (veya auth modelini) otomatik olarak log kaydıyla eşleştirir.
  • Kolay Manuel Loglama: activity()->log(...) akıcı arayüzü ile özel iş akışlarını anında kaydedebilirsiniz.
  • Log Temizleme Komutu: Belirli bir günden eski log kayıtlarını tek komutla temizleyen yerleşik Artisan aracına sahiptir.
  • Performans & Esneklik: İstenmeyen hassas alanları (password, remember_token) kolayca loglama dışı bırakabilirsiniz.

Kurulum

Composer ile paketi projenize dahil edin:

composer require spatie/laravel-activitylog

Migration ve yapılandırma dosyasını yayınlayıp çalıştırın:

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

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

Temel Kullanım

1. Model Değişikliklerini Otomatik Loglama

Modelinize LogsActivity trait'ini ekleyin ve getActivitylogOptions metodunu tanımlayın:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Spatie\Activitylog\Traits\LogsActivity;
use Spatie\Activitylog\LogOptions;

class Order extends Model
{
    use LogsActivity;

    protected $fillable = ['status', 'total_amount', 'shipping_address'];

    public function getActivitylogOptions(): LogOptions
    {
        return LogOptions::defaults()
            ->logOnly(['status', 'total_amount'])
            ->logOnlyDirty()
            ->dontSubmitEmptyLogs()
            ->useLogName('orders');
    }
}

Model güncellendiğinde:

$order = Order::find(1);
$order->status = 'shipped';
$order->save();
// Arka planda otomatik olarak eski: 'processing', yeni: 'shipped' farkı kaydedilir.

2. Manuel Aktivite Kaydı Oluşturma

use Spatie\Activitylog\Models\Activity;

// Basit log kaydı
activity()->log('Kullanıcı şifre sıfırlama talebinde bulundu.');

// Detaylı log kaydı
activity()
    ->causedBy(auth()->user())
    ->performedOn($order)
    ->withProperties([
        'ip' => request()->ip(),
        'browser' => request()->userAgent(),
        'action' => 'refund_initiated',
    ])
    ->log('Sipariş için iade süreci başlatıldı.');

3. Logları Sorgulama ve Görüntüleme

use Spatie\Activitylog\Models\Activity;

// Son 20 aktiviteyi getir
$latestActivities = Activity::with(['causer', 'subject'])
    ->latest()
    ->take(20)
    ->get();

// Belirli bir modelin geçmişi
$orderLogs = $order->activities;

foreach ($orderLogs as $activity) {
    echo $activity->description;
    echo $activity->causer?->name;
    // Değişen nitelikler
    print_r($activity->changes());
}

4. Eski Logları Temizleme

config/activitylog.php içinde belirlenen günden (varsayılan: 365 gün) eski kayıtları temizlemek için:

php artisan activitylog:clean