BAB 51. LOGGING ARCHITECTURE
Tujuan
Logging digunakan untuk memastikan seluruh aktivitas sistem dapat ditelusuri (traceability), dianalisis (observability), dan diaudit (accountability). Arsitektur logging TemuBelajar dirancang untuk mendukung debugging, monitoring operasional, analisis keamanan, serta evaluasi perilaku pengguna.
Prinsip Logging
| Prinsip | Implementasi |
|---|---|
| Structured Logging | Format JSON untuk setiap log entry |
| Correlation ID | ID unik per request untuk tracing lintas service |
| Centralized Logging | Semua log terpusat di satu sistem |
| Immutable | Log tidak boleh diubah setelah disimpan |
| Retention Policy | Penyimpanan terjadwal dan rotasi otomatis |
Kategori Log
| Jenis Log | Contoh Kejadian |
|---|---|
| Authentication Log | Login berhasil, logout, gagal login |
| Authorization Log | Akses ditolak karena role tidak sesuai |
| API Log | Request dan response setiap endpoint |
| Activity Log | Membuat request, booking diterima, sesi dimulai |
| AI Matching Log | Skor kandidat dan keputusan tutor terpilih |
| Queue Log | Job didispatch, diproses, gagal, atau retry |
| Notification Log | Push notification terkirim atau gagal |
| Error Log | Exception dan stack trace |
| Security Log | Brute force, GPS spoofing, unauthorized access |
Arsitektur Logging
flowchart LR
A["🌐 Laravel App"] --> LOG["📋 Logger\n(Monolog)"]
B["⏳ Queue Worker"] --> LOG
C["🤖 AI Engine"] --> LOG
LOG --> F["📁 Log Files\n(Storage/logs)"]
LOG --> DB[("💾 audit_logs\ntabel DB")]
LOG --> MON["📊 Monitoring\n(Future: ELK/Grafana)"]
style LOG fill:#7c3aed,color:#fff
style MON fill:#1f2937,color:#9ca3af
Format Log (JSON)
{
"timestamp": "2026-08-06T10:15:30Z",
"level": "INFO",
"module": "booking",
"action": "booking_accepted",
"user_id": 25,
"school_id": 3,
"request_id": "req_abc123",
"correlation_id": "corr_xyz789",
"ip_address": "192.168.1.1",
"duration_ms": 142,
"context": {
"booking_id": 55,
"tutor_id": 12
}
}
Log Level
| Level | Nilai | Kegunaan |
|---|---|---|
| DEBUG | 100 | Detail teknis untuk development |
| INFO | 200 | Aktivitas normal (login, request dibuat) |
| NOTICE | 250 | Kejadian penting namun tidak kritis |
| WARNING | 300 | Potensi masalah yang perlu diperhatikan |
| ERROR | 400 | Kegagalan fungsi (exception tertangani) |
| CRITICAL | 500 | Gangguan serius pada komponen sistem |
| ALERT | 550 | Membutuhkan intervensi segera |
| EMERGENCY | 600 | Sistem tidak dapat digunakan |
Implementasi di Laravel
// app/Core/Logging/ActivityLogger.php
class ActivityLogger
{
public static function log(
string $action,
string $module,
array $context = [],
string $level = 'info'
): void {
Log::channel('activity')->log($level, $action, [
'module' => $module,
'user_id' => auth()->id(),
'school_id' => auth()->user()?->school_id,
'correlation_id' => request()->header('X-Correlation-ID'),
'ip_address' => request()->ip(),
'context' => $context,
]);
}
}
// Penggunaan di Service
ActivityLogger::log('booking_accepted', 'bookings', ['booking_id' => 55]);
Retensi Log
| Jenis | Retensi |
|---|---|
| Debug Log | 7 hari |
| Activity Log | 90 hari |
| Security Log | 1 tahun |
| Audit Log (DB) | Permanen |