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 HasLogdi model, logging otomatis jalan - Detail forensik: Catat
oldvsnewvalue pada update - Konteks: Log include IP address dan user agent untuk security auditing
Method
bootHasLog(): void
Daftarkan 3 event listeners via Event::listen():
| Event | Filter | Keterangan |
|---|---|---|
eloquent.created: {class} | Tidak ada | Catat created |
eloquent.updated: {class} | Skip updated_at | Catat updated dengan old/new diff |
eloquent.deleted: {class} | Tidak ada | Catat deleted |
activityLogs(): MorphMany
Relasi polymorphic ke model ActivityLog.
php
$candidate->activityLogs; // semua log
$candidate->activityLogs()->latest()->take(10)->get(); // 10 terakhirlogActivity(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
| File | Tujuan |
|---|---|
app/Traits/Common/HasLog.php | Trait — event listeners + manual logging |
app/Models/Platform/ActivityLog/ActivityLog.php | Model activity_logs — user_id, action, properties, ip, user_agent |
app/Models/ | Model mana pun yang pakai use HasLog |