Laravel Logging: Cara Membaca dan Menangani Error dari laravel.log
Ketika aplikasi Laravel mengalami error, salah satu tempat pertama yang perlu diperiksa adalah file log. Laravel menyediakan sistem logging yang membantu developer mencatat informasi aplikasi, warning, exception, hingga error yang terjadi saat aplikasi berjalan.
File seperti laravel.log sering menjadi sumber informasi paling penting ketika sebuah halaman tiba-tiba menghasilkan 500 Internal Server Error, query database gagal, class tidak ditemukan, atau terjadi exception pada aplikasi.
Masalahnya, file log Laravel dapat berisi banyak informasi dan terlihat sulit dipahami jika belum terbiasa membacanya.
Artikel ini membahas Laravel Logging dari dasar hingga praktik debugging. Anda akan mempelajari lokasi laravel.log, cara membaca stack trace, level log, penggunaan Log facade, cara menemukan penyebab error, serta beberapa praktik terbaik untuk logging di aplikasi Laravel.
Apa Itu Laravel Logging?
Laravel Logging adalah sistem yang digunakan Laravel untuk mencatat informasi mengenai aktivitas dan kondisi aplikasi.
Logging dapat digunakan untuk mencatat berbagai informasi, misalnya:
- error aplikasi;
- exception;
- warning;
- informasi proses tertentu;
- request atau aktivitas tertentu;
- informasi debugging;
- kejadian penting pada aplikasi.
Laravel menggunakan sistem logging yang fleksibel sehingga log dapat diarahkan ke berbagai channel atau media penyimpanan sesuai konfigurasi aplikasi.
Dalam development, salah satu sumber yang paling sering diperiksa adalah file:
storage/logs/laravel.log
Di Mana Lokasi laravel.log?
Pada konfigurasi Laravel yang menggunakan file logging, file log biasanya berada di dalam direktori:
storage/logs/
File log yang umum ditemukan adalah:
storage/logs/laravel.log
Struktur sederhananya dapat terlihat seperti:
laravel-project/
├── app/
├── bootstrap/
├── config/
├── public/
├── resources/
├── routes/
├── storage/
│ └── logs/
│ └── laravel.log
└── ...
Namun, nama dan jumlah file log dapat berbeda tergantung konfigurasi logging yang digunakan aplikasi.
Cara Membaca laravel.log
Jika aplikasi mengalami error, langkah pertama adalah membuka file:
storage/logs/laravel.log
Pada Linux atau macOS, file tersebut dapat dibaca menggunakan:
tail -n 100 storage/logs/laravel.log
Perintah tersebut menampilkan sekitar 100 baris terakhir dari file log.
Untuk memantau log secara realtime, gunakan:
tail -f storage/logs/laravel.log
Dengan tail -f, developer dapat membuka terminal dan melihat log baru ketika aplikasi menerima request atau menghasilkan error.
Jika menggunakan Laravel Sail, perintah yang digunakan dapat disesuaikan dengan environment Docker yang digunakan.
Contoh Isi Error di laravel.log
Salah satu hal penting ketika membaca log adalah memahami struktur pesan error.
Contoh sederhana:
[2026-09-04 01:20:15] local.ERROR: Undefined variable $user
{"exception":"[object] (ErrorException(code: 0): Undefined variable $user at /var/www/html/app/Http/Controllers/ProfileController.php:25)"}
Dari contoh tersebut, terdapat beberapa informasi penting:
- Timestamp: kapan error terjadi.
- Environment:
local. - Level:
ERROR. - Pesan:
Undefined variable $user. - File:
ProfileController.php. - Line: baris ke-25.
Informasi tersebut biasanya sudah cukup untuk menentukan lokasi awal yang harus diperiksa.
Cara Menentukan Penyebab Error dari Log
Kesalahan umum ketika membaca log adalah langsung melihat baris paling bawah tanpa memahami exception utama.
Gunakan pendekatan berikut:
- Cari entry log terbaru.
- Perhatikan level log.
- Baca pesan exception.
- Cari file dan nomor baris.
- Baca stack trace.
- Periksa kode pada lokasi tersebut.
- Telusuri fungsi atau proses yang memanggil kode tersebut.
Contohnya, jika log mengatakan:
Undefined variable $user at app/Http/Controllers/ProfileController.php:25
Maka jangan langsung memperbaiki file lain. Periksa terlebih dahulu baris ke-25 pada:
app/Http/Controllers/ProfileController.php
Sering kali Laravel sudah memberikan petunjuk yang cukup spesifik mengenai sumber masalah.
Memahami Stack Trace Laravel
Stack trace merupakan daftar perjalanan eksekusi program sampai exception terjadi.
Contoh sederhananya:
ErrorException: Undefined variable $user
#0 app/Http/Controllers/ProfileController.php(25): ...
#1 vendor/laravel/framework/src/Illuminate/Routing/Controller.php(...): ...
#2 vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(...): ...
#3 vendor/laravel/framework/src/Illuminate/Routing/Route.php(...): ...
Jangan panik ketika melihat banyak baris dari folder vendor.
Dalam banyak kasus, fokus pertama sebaiknya diarahkan pada bagian stack trace yang menunjuk ke kode aplikasi sendiri, misalnya:
app/Http/Controllers/ProfileController.php
atau:
app/Models/User.php
File dalam vendor/ tetap penting, tetapi sering kali hanya menunjukkan bagaimana exception dari kode aplikasi diproses oleh framework.
Level Logging di Laravel
Laravel mendukung beberapa level logging yang umum digunakan dalam sistem logging.
Level tersebut membantu membedakan tingkat kepentingan sebuah pesan.
Emergency
Digunakan untuk kondisi yang sangat serius dan membuat sistem tidak dapat digunakan.
Alert
Digunakan untuk kondisi yang memerlukan tindakan segera.
Critical
Digunakan untuk kondisi kritis seperti kegagalan komponen penting aplikasi.
Error
Digunakan ketika terjadi error yang perlu ditangani.
Warning
Digunakan untuk kondisi yang berpotensi menimbulkan masalah.
Notice
Digunakan untuk kondisi normal tetapi perlu diperhatikan.
Info
Digunakan untuk mencatat informasi umum mengenai proses aplikasi.
Debug
Digunakan untuk informasi detail yang terutama berguna selama proses development dan debugging.
Contohnya:
use Illuminate\Support\Facades\Log;
Log::info('User berhasil login');
Menggunakan Log Facade di Laravel
Laravel menyediakan Log facade untuk membuat log secara manual.
Contoh:
use Illuminate\Support\Facades\Log;
Log::info('Proses import dimulai');
Untuk warning:
Log::warning('File hampir mencapai batas penyimpanan');
Untuk error:
Log::error('Gagal memproses pembayaran');
Logging manual berguna ketika developer ingin mengetahui apakah suatu proses tertentu benar-benar dijalankan.
Menambahkan Context pada Log
Pesan seperti:
Log::info('User login');
terkadang terlalu umum.
Developer dapat menambahkan context agar informasi yang dicatat lebih berguna:
Log::info('User login', [
'user_id' => $user->id,
'email' => $user->email,
]);
Dengan context, developer dapat mengetahui user mana yang melakukan aktivitas tersebut tanpa harus menebak dari pesan log.
Contoh lain:
Log::warning('Pembayaran gagal', [
'order_id' => $order->id,
'payment_status' => $order->payment_status,
]);
Context seperti ini sangat membantu ketika aplikasi sudah memiliki banyak pengguna dan transaksi.
Mencatat Exception ke Log
Jika ingin mencatat exception secara manual, gunakan level error atau metode yang sesuai dengan kebutuhan logging.
try {
$payment->process();
} catch (\Throwable $e) {
Log::error('Payment processing failed', [
'message' => $e->getMessage(),
'exception' => $e,
]);
throw $e;
}
Dalam banyak kasus, Laravel sudah menangani exception secara otomatis. Logging manual sebaiknya digunakan ketika developer memang membutuhkan konteks tambahan dari proses tertentu.
Memahami File Logging Berdasarkan Environment
Laravel memiliki environment seperti:
local
production
testing
Konfigurasi environment biasanya ditentukan melalui file .env:
APP_ENV=local
Environment ini dapat memengaruhi bagaimana aplikasi menangani error dan logging.
Ketika melakukan debugging pada local environment, informasi error yang lebih detail biasanya sangat membantu.
Sementara itu, pada production, informasi sensitif sebaiknya tidak ditampilkan langsung kepada pengguna.
APP_DEBUG dan Laravel Logging
Salah satu konfigurasi Laravel yang penting ketika debugging adalah:
APP_DEBUG=true
Ketika development, konfigurasi debug dapat membantu developer melihat detail error.
Namun, jangan mengaktifkan debug mode secara sembarangan pada production.
Environment production umumnya menggunakan:
APP_ENV=production
APP_DEBUG=false
Jika APP_DEBUG aktif pada production, detail exception berpotensi menampilkan informasi internal aplikasi yang seharusnya tidak diketahui pengguna.
Karena itu, debugging production sebaiknya dilakukan melalui log dan sistem monitoring, bukan dengan menampilkan detail exception kepada pengguna.
Mengapa Error 500 Perlu Dicek ke laravel.log?
Error:
500 Internal Server Error
hanya memberi tahu bahwa server mengalami masalah.
Pesan tersebut belum menjelaskan penyebab sebenarnya.
Penyebabnya dapat berupa:
- exception PHP;
- query database gagal;
- class atau method tidak ditemukan;
- permission filesystem;
- konfigurasi environment salah;
- service eksternal gagal;
- kesalahan pada business logic.
Karena itu, ketika menemukan error 500, periksa log terlebih dahulu:
tail -f storage/logs/laravel.log
Kemudian ulangi request yang menyebabkan error dan lihat entry log terbaru.
Contoh Debugging Error Database
Misalnya aplikasi menghasilkan error:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'username' in 'where clause'
Pesan tersebut memberikan petunjuk bahwa query mencoba menggunakan kolom username, tetapi database tidak menemukan kolom tersebut.
Developer kemudian dapat memeriksa:
- struktur tabel database;
- migration;
- nama kolom pada model;
- query yang digunakan;
- data atau input yang dikirimkan.
Jangan langsung menyimpulkan bahwa Laravel bermasalah. Error log harus dibaca untuk menentukan komponen mana yang sebenarnya gagal.
Contoh Debugging Error Class Not Found
Misalnya muncul:
Class "App\Models\Product" not found
Beberapa hal yang dapat diperiksa:
- Apakah file model benar-benar ada?
- Apakah namespace sudah benar?
- Apakah nama class sesuai?
- Apakah import menggunakan namespace yang benar?
- Apakah perubahan autoload perlu diperbarui?
Jika masalah berkaitan dengan autoload Composer, salah satu perintah yang dapat digunakan adalah:
composer dump-autoload
Namun, jalankan perintah tersebut setelah memastikan sumber masalah memang berkaitan dengan autoload.
Membersihkan Cache Setelah Perubahan Konfigurasi
Dalam kondisi tertentu, perubahan konfigurasi belum terlihat karena aplikasi masih menggunakan konfigurasi yang telah di-cache.
Laravel menyediakan perintah Artisan untuk membersihkan cache aplikasi:
php artisan optimize:clear
Perintah ini dapat membantu ketika debugging masalah yang berkaitan dengan cache konfigurasi, route, event, atau view.
Namun, cache bukan penyebab semua masalah. Gunakan perintah tersebut ketika gejalanya memang mengarah pada masalah cache atau konfigurasi yang belum diperbarui.
Memeriksa Log Secara Realtime
Ketika melakukan debugging di server Linux, salah satu teknik yang praktis adalah memantau log secara realtime:
tail -f storage/logs/laravel.log
Kemudian lakukan tindakan yang menyebabkan error, misalnya membuka halaman tertentu atau mengirim form.
Jika Laravel menghasilkan exception, entry baru biasanya akan muncul pada terminal.
Teknik ini sangat berguna ketika developer ingin menghubungkan sebuah tindakan pengguna dengan error yang muncul di backend.
Jangan Menulis Informasi Sensitif ke Log
Logging memang membantu debugging, tetapi bukan berarti semua informasi boleh dicatat.
Hindari memasukkan data sensitif seperti:
- password;
- token autentikasi;
- API key;
- secret key;
- nomor kartu pembayaran;
- data pribadi yang tidak diperlukan.
Contoh yang sebaiknya dihindari:
Log::info('Login attempt', [
'email' => $request->email,
'password' => $request->password,
]);
Jangan pernah mencatat password pengguna ke dalam log.
Jika membutuhkan informasi untuk debugging, catat hanya data yang benar-benar diperlukan.
Memahami Logging Channel Laravel
Laravel menggunakan konsep logging channel untuk menentukan bagaimana log diproses dan disimpan.
Konfigurasi logging dapat ditemukan pada:
config/logging.php
Contoh konfigurasi channel dapat terlihat seperti:
'default' => env('LOG_CHANNEL', 'stack'),
Environment aplikasi kemudian dapat menentukan channel yang digunakan:
LOG_CHANNEL=stack
Konfigurasi channel memungkinkan aplikasi menggunakan pendekatan logging yang berbeda sesuai kebutuhan.
Logging ke File Harian
Untuk aplikasi production, menyimpan semua log dalam satu file tanpa rotasi dapat menyebabkan ukuran file semakin besar.
Laravel mendukung channel seperti daily untuk membuat file log berdasarkan periode tertentu.
Contoh:
LOG_CHANNEL=daily
Dengan pendekatan ini, log dapat dipisahkan berdasarkan tanggal sehingga lebih mudah dikelola.
Konfigurasi retention atau jumlah file yang dipertahankan sebaiknya disesuaikan dengan kebutuhan aplikasi dan kapasitas storage.
Strategi Debugging Laravel Menggunakan Log
Ketika menemukan error, gunakan alur debugging yang sistematis.
Langkah 1: Reproduksi Error
Coba ulangi tindakan yang menghasilkan masalah.
Langkah 2: Buka Log Terbaru
tail -n 100 storage/logs/laravel.log
Langkah 3: Cari Exception Utama
Perhatikan pesan seperti:
ErrorException
QueryException
AuthenticationException
ValidationException
NotFoundHttpException
Langkah 4: Cari File dan Baris Kode
Perhatikan bagian seperti:
app/Http/Controllers/OrderController.php:45
Langkah 5: Periksa Kode Aplikasi
Buka file tersebut dan periksa kode di sekitar baris yang disebutkan.
Langkah 6: Telusuri Penyebabnya
Error pada satu baris terkadang merupakan akibat dari masalah yang terjadi sebelumnya. Karena itu, jangan hanya memperbaiki gejala tanpa memahami penyebabnya.
Langkah 7: Uji Kembali
Setelah melakukan perubahan, ulangi proses yang sebelumnya menghasilkan error dan periksa log terbaru.
Praktik Terbaik Laravel Logging
Logging yang baik bukan sekadar menulis sebanyak mungkin informasi ke dalam file log.
Beberapa praktik yang dapat diterapkan antara lain:
- gunakan level log sesuai tingkat kepentingannya;
- tambahkan context yang relevan;
- jangan mencatat password atau secret;
- gunakan log rotation pada production;
- pisahkan log berdasarkan kebutuhan jika aplikasi semakin besar;
- gunakan monitoring atau log aggregation untuk aplikasi berskala besar;
- hindari logging berlebihan pada proses yang sangat sering berjalan.
Perbedaan Log Debugging dan Error Handling
Logging dan error handling memiliki fungsi yang berbeda.
Logging digunakan untuk mencatat informasi mengenai apa yang terjadi pada aplikasi.
Sementara error handling digunakan untuk menentukan bagaimana aplikasi merespons ketika terjadi error atau exception.
Contohnya:
try {
$order->process();
} catch (\Throwable $e) {
Log::error('Order processing failed', [
'order_id' => $order->id,
'exception' => $e,
]);
return back()->with('error', 'Pesanan gagal diproses.');
}
Pada contoh tersebut, logging digunakan untuk membantu developer mengetahui penyebab masalah, sedangkan aplikasi memberikan respons yang lebih aman dan mudah dipahami kepada pengguna.
Laravel Logging di Production
Debugging pada production membutuhkan perhatian lebih karena log dapat berisi informasi internal aplikasi.
Beberapa hal yang perlu diperhatikan:
- gunakan
APP_DEBUG=false; - batasi akses terhadap file log;
- atur retensi log;
- hindari data sensitif;
- gunakan monitoring jika aplikasi membutuhkan observability yang lebih baik.
Jangan menjadikan laravel.log sebagai satu-satunya mekanisme monitoring untuk aplikasi yang sudah memiliki skala besar. Pada kondisi tersebut, sistem log aggregation dan error monitoring dapat membantu tim menemukan masalah lebih cepat.
Kesimpulan
Laravel Logging merupakan salah satu fitur penting untuk debugging dan memantau kondisi aplikasi. Ketika aplikasi menghasilkan error, file log sering kali memberikan informasi yang jauh lebih berguna dibandingkan pesan 500 Internal Server Error yang terlihat pada browser.
Lokasi log yang umum digunakan adalah:
storage/logs/laravel.log
Untuk melihat log terbaru:
tail -n 100 storage/logs/laravel.log
Untuk memantau log secara realtime:
tail -f storage/logs/laravel.log
Laravel juga menyediakan Log facade untuk mencatat informasi secara manual:
use Illuminate\Support\Facades\Log;
Log::info('Proses berhasil dijalankan');
Ketika membaca error, fokus pada timestamp, level log, pesan exception, file, nomor baris, dan stack trace. Informasi tersebut dapat membantu mempersempit sumber masalah dengan cepat.
Yang tidak kalah penting, logging harus dilakukan secara bijak. Jangan mencatat password, token, API key, atau data sensitif lainnya hanya demi kebutuhan debugging.
Dengan memahami cara membaca laravel.log dan menggunakan Laravel Logging dengan benar, proses mencari dan menangani error Laravel akan menjadi lebih sistematis, cepat, dan aman.

