Error pada aplikasi web dapat muncul kapan saja, mulai dari validasi yang gagal hingga exception yang tidak terduga. Karena itu, memahami error handling di Laravel menjadi fitur penting untuk menjaga keamanan aplikasi sekaligus mempermudah proses debugging tanpa menampilkan informasi sensitif kepada pengguna.
Laravel telah menyediakan mekanisme penanganan error yang lengkap, mulai dari exception handler, halaman error custom, hingga sistem logging bawaan. Pada artikel ini, kita akan membahas cara membuat error handling di Laravel agar aplikasi lebih aman, mudah dipelihara, dan nyaman digunakan.
Mengenal Cara Kerja Error Handling di Laravel
Sebelum memodifikasi sistem error pada Laravel, penting untuk memahami bagaimana framework ini memproses sebuah exception. Setiap kali request yang masuk memicu kesalahan, Laravel akan menangkapnya melalui mekanisme Exception Handler sebelum respons dikirimkan ke pengguna.
Pada Laravel 10 dan versi sebelumnya, pusat pengelolaan exception berada di berkas App\Exceptions\Handler.php. Sementara itu, mulai Laravel 11, konfigurasi exception dipusatkan di bootstrap/app.php sehingga struktur aplikasi menjadi lebih sederhana dan mudah dikelola.
Proses Reporting dan Rendering Exception
Ketika sebuah exception berhasil ditangkap, Laravel akan menjalankan dua proses utama, yaitu reporting dan rendering.
- Reporting bertugas mencatat informasi error ke dalam file log sehingga pengembang dapat melakukan proses debugging dengan lebih mudah.
- Rendering bertugas mengubah error teknis menjadi respons HTTP atau halaman error yang aman dan lebih mudah dipahami oleh pengguna.
Dengan mekanisme ini, Laravel tidak hanya membantu pengembang melacak sumber masalah melalui sistem logging, tetapi juga menjaga agar informasi sensitif aplikasi tidak ditampilkan secara langsung kepada pengunjung website.
Membuat Error Handling di Laravel
Proses membuat error handling di laravel sangatlah fleksibel dan bisa disesuaikan dengan kebutuhan proyek aplikasi web yang dibangun. Praktik terbaiknya adalah membedakan respons untuk akses web biasa dan akses API (Application Programming Interface).
Berikut adalah langkah-langkah teknis untuk mengelola exception kustom pada Laravel versi terbaru:
- Buka direktori proyek Laravel di code editor dan cari berkas
bootstrap/app.php. Berkas ini adalah pusat pengelolaan middleware dan manajemen kesalahan pada Laravel terbaru. - Di dalam berkas tersebut, Bisa menyisipkan fungsi kustom untuk mencegat jenis error tertentu, misalnya saat data tidak ditemukan di database (
ModelNotFoundException).
Contoh script implementasi yang dapat digunakan dan bisa dimasukan pada berkas bootstrap/app.php dibaris ->withExceptions(function (Exceptions $exceptions) { Seperti berikut;
->withExceptions(function (Exceptions $exceptions) {
$exceptions->render(function (ModelNotFoundException $e, Request $request) {
if ($request->is('api/*')) {
return response()->json([
'status' => false,
'message' => 'Data tidak ditemukan di server.'
], 404);
}
return response()->view('errors.404', [], 404);
});
})Serta jangan lupa menambahkan berikut pada line atas sebelum return Application::configure(basePath: dirname(__DIR__))
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\Request;Langkah di atas memastikan bahwa pengguna API akan menerima respons dalam format JSON, sementara pengunjung web biasa akan diarahkan ke halaman HTML.
Contoh Implementasi Custom Error Pages (404, 500) yang User Friendly
Menampilkan halaman error bawaan Laravel yang polos kepada pengguna akhir bukanlah hal yang dapat direkomendasikan. Pengembang perlu menyediakan halaman kesalahan kustom agar pengunjung tidak kebingungan.
Untuk membuatnya, Laravel menyediakan fitur melalui perintah Command Line Interface (CLI) Artisan yang sangat praktis. Anda hanya perlu menjalankan satu baris perintah di terminal:
php artisan vendor:publish --tag=laravel-errorsPerintah di atas akan menyalin berkas-berkas template bawaan ke direktori resources/views/errors/. Di sana, Anda akan menemukan beberapa berkas penting seperti 404.blade.php dan 500.blade.php.
Selanjutnya, Anda bebas memodifikasi kode HTML dan CSS di dalam berkas tersebut. Pastikan Anda menambahkan elemen desain yang sesuai dengan identitas brand, serta menyertakan tombol navigasi untuk memandu pengunjung kembali ke homepage.
Untuk melakukan pengujian anda bisa masuk folder routes, dan tambahkan berikut pada file web.php
Route::get('/test-error', function () {
abort(500);
});Untuk hasilnya seperti berikut jika anda menggunakan error handling bawaan dari framework Laravel.

Jika anda ingin melakukan perubahan pada tampilan error tersebut anda bisa masuk ke direktori resources/views/errors/ dan berikut contoh script kustom error 500.
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Server Sedang Gangguan - Error 500</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #f8fafc;
color: #334155;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
.error-container {
text-align: center;
background: #ffffff;
padding: 50px 40px;
border-radius: 12px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
max-width: 500px;
width: 90%;
}
.error-code {
font-size: 80px;
font-weight: bold;
color: #e11d48; /* Warna merah untuk indikasi error */
margin: 0;
line-height: 1;
}
.error-title {
font-size: 24px;
font-weight: 600;
margin: 20px 0 10px;
color: #0f172a;
}
.error-message {
font-size: 16px;
margin-bottom: 30px;
line-height: 1.6;
color: #64748b;
}
.btn-home {
text-decoration: none;
background-color: #2563eb; /* Warna biru profesional */
color: #ffffff;
padding: 12px 28px;
border-radius: 6px;
font-weight: 600;
transition: background-color 0.3s ease;
display: inline-block;
}
.btn-home:hover {
background-color: #1d4ed8;
}
</style>
</head>
<body>
<div class="error-container">
<h1 class="error-code">500</h1>
<h2 class="error-title">Sistem Sedang Dalam Perbaikan</h2>
<p class="error-message">
Mohon maaf, server kami sedang mengalami kendala internal dan tidak dapat memproses permintaan Anda saat ini. Tim teknis kami telah menerima laporan ini dan sedang berupaya memperbaikinya.
</p>
<a href="{{ url('/') }}" class="btn-home">Kembali ke Beranda</a>
</div>
</body>
</html>Serta untuk hasil tampilannya ketika error 500 akan tampil seperti berikut

Tips Mengelola Error di Laravel
Membangun sistem Error Handling yang komprehensif membutuhkan pemahaman yang cermat tentang aspek keamanan. Berikut adalah tips yang dapat diikuti:
- Matikan Mode Debug di Server Production: Pastikan variabel
APP_DEBUG=falsepada berkas.envsaat aplikasi sudah running(online). Jika dibiarkan true, kredensial database dan struktur folder Anda bisa terekspos ke publik. - Gunakan Log Rotation: Ubah nilai
LOG_CHANNEL=dailydi konfigurasi.envagar Laravel membuat berkas log harian baru secara otomatis. Hal ini akan mencegah kapasitas disk space server Anda penuh akibat satu berkas log yang membengkak. - Gunakan Layanan Tracking Pihak Ketiga: Untuk proyek berskala besar, integrasikan aplikasi Laravel dengan tools seperti Sentry atau Flare agar notifikasi error langsung terkirim secara real-time ke email tim developer.
FAQ
Berikut beberapa pertanyaan populer seputar error handling di Laravel.
Di mana letak penyimpanan file log error di Laravel?
Secara bawaan, Laravel menyimpan semua catatan error di dalam direktori storage/logs/laravel.log. Pastikan folder storage tersebut memiliki hak akses yang benar agar aplikasi bisa menulis ke dalamnya.
Mengapa muncul peringatan “419 Page Expired”?
Peringatan ini muncul karena fitur keamanan Cross-Site Request Forgery (CSRF) memblokir pengiriman formulir yang masa berlakunya habis. Solusinya, pastikan Anda tidak lupa menambahkan kode @csrf di dalam tag <form> pada berkas Blade Anda.
Bagaimana cara menguji halaman error 500 di localhost?
Anda bisa menambahkan sebuah route sementara di berkas routes/web.php yang mengeksekusi fungsi abort(500);. Saat link tersebut Anda buka, browser akan segera menampilkan simulasi halaman kesalahan internal server seperti yang sudah dipraktikan pada sebelumnya.
Kesimpulan
Menerapkan error handling di Laravel bukan hanya membuat tampilan error menjadi lebih rapi, tetapi juga membantu menjaga keamanan dan kenyamanan pengguna saat terjadi masalah pada aplikasi. Alih-alih menampilkan pesan error yang membingungkan atau berpotensi membocorkan informasi sensitif, Laravel dapat menampilkan halaman yang lebih aman dan informatif.
Di sisi lain, sistem ini tetap mencatat seluruh detail error ke dalam log sehingga pengembang dapat melakukan proses debugging dan perbaikan dengan lebih cepat. Dengan penerapan error handling yang baik, pengalaman pengguna tetap terjaga, sementara proses pemeliharaan aplikasi menjadi lebih mudah dan terstruktur.


