Lewati ke konten utama

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

PrinsipImplementasi
Structured LoggingFormat JSON untuk setiap log entry
Correlation IDID unik per request untuk tracing lintas service
Centralized LoggingSemua log terpusat di satu sistem
ImmutableLog tidak boleh diubah setelah disimpan
Retention PolicyPenyimpanan terjadwal dan rotasi otomatis

Kategori Log

Jenis LogContoh Kejadian
Authentication LogLogin berhasil, logout, gagal login
Authorization LogAkses ditolak karena role tidak sesuai
API LogRequest dan response setiap endpoint
Activity LogMembuat request, booking diterima, sesi dimulai
AI Matching LogSkor kandidat dan keputusan tutor terpilih
Queue LogJob didispatch, diproses, gagal, atau retry
Notification LogPush notification terkirim atau gagal
Error LogException dan stack trace
Security LogBrute 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

LevelNilaiKegunaan
DEBUG100Detail teknis untuk development
INFO200Aktivitas normal (login, request dibuat)
NOTICE250Kejadian penting namun tidak kritis
WARNING300Potensi masalah yang perlu diperhatikan
ERROR400Kegagalan fungsi (exception tertangani)
CRITICAL500Gangguan serius pada komponen sistem
ALERT550Membutuhkan intervensi segera
EMERGENCY600Sistem 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

JenisRetensi
Debug Log7 hari
Activity Log90 hari
Security Log1 tahun
Audit Log (DB)Permanen