Tutorial 23 Aug 2026 1 Kali Dibaca

Cara Membuat Audit Log Aktivitas Pengguna di Laravel

Gugun Nurdiansyah
Penulis
Cara Membuat Audit Log Aktivitas Pengguna di Laravel

Apa Itu Audit Log?

Audit log adalah catatan aktivitas yang dilakukan pengguna dalam sebuah aplikasi.

Contohnya:

Admin login
↓
Membuat transaksi
↓
Mengubah data pelanggan
↓
Menghapus data
↓
Logout

Informasi yang dapat dicatat:

  1. User.

  2. Aktivitas.

  3. Modul.

  4. Data yang diubah.

  5. IP Address.

  6. User Agent.

  7. Waktu aktivitas.

Audit log sangat berguna untuk aplikasi bisnis yang membutuhkan keamanan dan pelacakan aktivitas pengguna.

Membuat Tabel Audit Log

Buat migration:

php artisan make:model AuditLog -m

Contoh migration:

Schema::create('audit_logs', function (Blueprint $table) {
    $table->id();

    $table->foreignId('user_id')
        ->nullable()
        ->constrained()
        ->nullOnDelete();

    $table->string('action');
    $table->string('module')->nullable();
    $table->unsignedBigInteger('record_id')->nullable();

    $table->json('old_values')->nullable();
    $table->json('new_values')->nullable();

    $table->ipAddress('ip_address')->nullable();
    $table->text('user_agent')->nullable();

    $table->timestamps();
});

Kemudian:

php artisan migrate

Membuat Model AuditLog

class AuditLog extends Model
{
    protected $fillable = [
        'user_id',
        'action',
        'module',
        'record_id',
        'old_values',
        'new_values',
        'ip_address',
        'user_agent',
    ];

    protected $casts = [
        'old_values' => 'array',
        'new_values' => 'array',
    ];
}

Mencatat Aktivitas Pengguna

Contohnya ketika user membuat transaksi:

AuditLog::create([
    'user_id' => auth()->id(),
    'action' => 'create',
    'module' => 'transaction',
    'record_id' => $transaction->id,
    'new_values' => $transaction->toArray(),
    'ip_address' => request()->ip(),
    'user_agent' => request()->userAgent(),
]);

Data tersebut akan mencatat siapa yang membuat transaksi dan kapan aktivitas dilakukan.

Mencatat Perubahan Data

Untuk update, simpan data sebelum dan sesudah perubahan.

$oldData = $customer->toArray();

$customer->update($request->validated());

AuditLog::create([
    'user_id' => auth()->id(),
    'action' => 'update',
    'module' => 'customer',
    'record_id' => $customer->id,
    'old_values' => $oldData,
    'new_values' => $customer->fresh()->toArray(),
    'ip_address' => request()->ip(),
    'user_agent' => request()->userAgent(),
]);

Hasilnya dapat digunakan untuk mengetahui perubahan data.

Contoh:

Nama sebelum:
Budi

Nama sesudah:
Budi Santoso

Mencatat Penghapusan

Sebelum data dihapus:

$oldData = $customer->toArray();

$customer->delete();

AuditLog::create([
    'user_id' => auth()->id(),
    'action' => 'delete',
    'module' => 'customer',
    'record_id' => $customer->id,
    'old_values' => $oldData,
    'ip_address' => request()->ip(),
    'user_agent' => request()->userAgent(),
]);

Dengan begitu, administrator masih memiliki riwayat data yang pernah dihapus.

Mencatat Login

Audit log juga dapat digunakan untuk mencatat login:

if (Auth::attempt($credentials)) {

    $request->session()->regenerate();

    AuditLog::create([
        'user_id' => auth()->id(),
        'action' => 'login',
        'module' => 'authentication',
        'ip_address' => $request->ip(),
        'user_agent' => $request->userAgent(),
    ]);

    return redirect('/dashboard');
}

Logout juga dapat dicatat:

$userId = auth()->id();

Auth::logout();

AuditLog::create([
    'user_id' => $userId,
    'action' => 'logout',
    'module' => 'authentication',
    'ip_address' => $request->ip(),
    'user_agent' => $request->userAgent(),
]);

Membuat Helper Audit Log

Agar tidak menulis kode berulang, buat helper:

function audit(
    string $action,
    string $module,
    ?int $recordId = null,
    ?array $oldValues = null,
    ?array $newValues = null
) {
    return AuditLog::create([
        'user_id' => auth()->id(),
        'action' => $action,
        'module' => $module,
        'record_id' => $recordId,
        'old_values' => $oldValues,
        'new_values' => $newValues,
        'ip_address' => request()->ip(),
        'user_agent' => request()->userAgent(),
    ]);
}

Kemudian cukup:

audit(
    'update',
    'customer',
    $customer->id,
    $oldData,
    $newData
);

Menggunakan Observer

Untuk aplikasi besar, audit log dapat menggunakan Laravel Observer.

Buat:

php artisan make:observer CustomerObserver --model=Customer

Kemudian:

class CustomerObserver
{
    public function created(Customer $customer): void
    {
        audit(
            'create',
            'customer',
            $customer->id,
            null,
            $customer->toArray()
        );
    }

    public function updated(Customer $customer): void
    {
        audit(
            'update',
            'customer',
            $customer->id,
            $customer->getOriginal(),
            $customer->getChanges()
        );
    }

    public function deleted(Customer $customer): void
    {
        audit(
            'delete',
            'customer',
            $customer->id,
            $customer->toArray()
        );
    }
}

Observer kemudian didaftarkan pada model atau service provider sesuai struktur aplikasi.

Hanya Catat Data yang Berubah

Tidak selalu perlu menyimpan seluruh record.

Untuk update, lebih efisien menyimpan perubahan:

$changes = $customer->getChanges();

Contohnya:

{
    "phone": "08123456789",
    "status": "active"
}

Hal ini membuat audit log lebih mudah dibaca dan mengurangi ukuran data.

Membuat Halaman Audit Log

Administrator dapat diberikan halaman:

/audit-logs

Contoh tampilan:

Tanggal          User       Aktivitas
23/08/2026       Admin      Login
23/08/2026       Admin      Create Customer
23/08/2026       Staff      Update Transaction
23/08/2026       Manager    Delete Product

Tambahkan filter:

User
Aktivitas
Modul
Tanggal
IP Address

Dengan filter tersebut, administrator lebih mudah mencari aktivitas tertentu.

Detail Audit Log

Ketika salah satu log dibuka:

Aktivitas : Update Customer
User      : Admin
Tanggal   : 23 Agustus 2026
IP        : 192.168.1.20

Perubahan:
Nama
Sebelum : Budi
Sesudah : Budi Santoso

Status
Sebelum : Pending
Sesudah : Active

Hal ini sangat berguna ketika terjadi kesalahan atau perubahan data yang tidak diketahui.

Audit Log untuk Sistem Multi-Cabang

Pada aplikasi multi-cabang, audit log sebaiknya juga mencatat cabang.

Tambahkan:

$table->foreignId('branch_id')
    ->nullable()
    ->constrained();

Kemudian:

AuditLog::create([
    'user_id' => auth()->id(),
    'branch_id' => auth()->user()->branch_id,
    'action' => 'update',
    'module' => 'transaction',
    'record_id' => $transaction->id,
]);

Administrator pusat dapat melihat:

Cabang Bekasi
Cabang Karawang
Cabang Bandung

beserta aktivitas masing-masing.

Jangan Mencatat Password

Audit log harus berhati-hati terhadap data sensitif.

Jangan menyimpan:

password
password_confirmation
token
secret key
API key
nomor kartu

Jika menggunakan $request->all(), sebaiknya lakukan filtering terlebih dahulu.

Contohnya:

$data = $request->except([
    'password',
    'password_confirmation',
    'token',
]);

Menjaga Audit Log

Audit log sebaiknya tidak mudah diubah oleh pengguna biasa.

Idealnya:

User
↓
Melakukan aktivitas
↓
Audit Log
↓
Admin membaca

Bukan:

User
↓
Aktivitas
↓
User dapat menghapus audit log

Untuk sistem dengan kebutuhan keamanan tinggi, akses penghapusan audit log sebaiknya sangat dibatasi.

Audit Log vs Laravel Log

Keduanya memiliki fungsi berbeda.

Laravel Log biasanya digunakan untuk:

Error
Exception
Debug
System event

Sedangkan Audit Log digunakan untuk:

Siapa melakukan apa
Kapan dilakukan
Data apa yang berubah

Contohnya:

Laravel Log:
Database connection failed.

Audit Log:
Admin mengubah harga produk A.

Keduanya dapat digunakan secara bersamaan.

Audit Log Bersama Ovla Media

Ovla Media dapat membantu mengembangkan sistem audit dan keamanan aplikasi Laravel, termasuk:

  1. Audit log pengguna.

  2. Login history.

  3. Activity monitoring.

  4. Role dan permission.

  5. Multi-cabang.

  6. Tracking perubahan data.

  7. Security logging.

  8. Dashboard monitoring.

  9. Laravel Pulse.

  10. Aplikasi bisnis custom.

Audit log dapat diterapkan pada sistem klinik, Point of Sales, inventory, koperasi, CRM, ERP, maupun aplikasi internal perusahaan.

Kesimpulan

Audit log membantu perusahaan mengetahui aktivitas pengguna di dalam aplikasi.

Konsep sederhananya:

User
↓
Melakukan Aktivitas
↓
Laravel
↓
Audit Log
↓
Admin

Data yang dapat dicatat antara lain:

  1. User.

  2. Aktivitas.

  3. Modul.

  4. Record ID.

  5. Data sebelum perubahan.

  6. Data setelah perubahan.

  7. IP Address.

  8. User Agent.

  9. Waktu aktivitas.

Untuk aplikasi bisnis, audit log sangat berguna ketika perlu mengetahui siapa yang mengubah, membuat, atau menghapus suatu data.

Yang paling penting, jangan menyimpan password, token, API key, atau informasi sensitif lainnya ke dalam audit log.

#Audit Log Laravel #Laravel Audit Log #Activity Log Laravel #Laravel Security #User Activity Laravel #Laravel Authentication #Laravel Observer #Laravel Logging #Tracking Perubahan Data #Laravel Multi-Cabang #Laravel Database #Laravel Production #Security Laravel #PHP Laravel #Web Development #Aplikasi Laravel #Sistem Audit #User Monitoring #Ovla Media #Jasa Laravel
Beranda Produk Artikel
Konsultasi
OVLA

Navigasi Utama

Hubungi Kami

Mulai Konsultasi Sekarang