Skip to content

Log (HasLog)

File: app/Traits/Common/HasLog.php

Trait Eloquent Laravel yang otomatis mencatat event model (create, update, delete) ke tabel activity_logs — dengan audit trail termasuk user, IP address, user agent, dan nilai lama/baru.

Ringkasan

Model mana pun yang pakai HasLog akan otomatis membuat record ActivityLog setiap kali model dibuat, diubah, atau dihapus — tanpa kode tambahan di controller atau service.


Kenapa Ada

  • Audit trail: Setiap perubahan ke model penting tercatat dengan siapa dan apa yang berubah
  • Zero-effort: Tinggal tambah use HasLog di model, logging otomatis jalan
  • Detail forensik: Catat old vs new value pada update
  • Konteks: Log include IP address dan user agent untuk security auditing

Method

bootHasLog(): void

Daftarkan 3 event listeners via Event::listen():

EventFilterKeterangan
eloquent.created: {class}Tidak adaCatat created
eloquent.updated: {class}Skip updated_atCatat updated dengan old/new diff
eloquent.deleted: {class}Tidak adaCatat deleted

activityLogs(): MorphMany

Relasi polymorphic ke model ActivityLog.

php
$candidate->activityLogs;                          // semua log
$candidate->activityLogs()->latest()->take(10)->get(); // 10 terakhir

logActivity(string $action, ?string $description, ?array $properties): ActivityLog

Mencatat aktivitas secara manual. Otomatis menyertakan Auth::id(), Request::ip(), dan Request::userAgent().


Cara Pakai

php
use App\Traits\Common\HasLog;

class Candidate extends Model
{
    use HasLog;
}

// Logging otomatis
$candidate = Candidate::create([...]);   // → "Candidate was created."
$candidate->update(['status' => 'hired']); // → "Candidate was updated." + old/new diff
$candidate->delete();                    // → "Candidate was deleted."

// Manual
$candidate->logActivity('status_changed', 'Pindah ke interview', [
    'from' => 'screening', 'to' => 'interview',
]);

File Penting

FileTujuan
app/Traits/Common/HasLog.phpTrait — event listeners + manual logging
app/Models/Platform/ActivityLog/ActivityLog.phpModel activity_logs — user_id, action, properties, ip, user_agent
app/Models/Model mana pun yang pakai use HasLog