Cara Mudah Debugging Aplikasi di Server Produksi
Laravel menyediakan error reporting yang cukup powerful. Error reporting ini bisa disesuaikan sesuai dengan kebutuhan aplikasi, misal dimatikan untuk level produksi. Secara bawaan, hampir semua kesalahan (notice, warning, error, sampai dengan fatal error) akan menghentikan jalannya aplikasi dan akan menampilkan pesan kesalahan. Hal ini berguna untuk memastikan aplikasi yang akan di-deploy nantinya benar-benar bersih dan bug free.
Sebagai contoh, saya memanggil sebuah variabel yang tidak didefinisikan di manapun sebelumnya.
Selain ditampilkan langsung di peramban (browser), pesan kesalahan tersebut juga disimpan dalam berkas log (disimpan dalam direktori storage/logs/laravel.log
). Isinya sama persis dengan pesan kesalahan pada gambar di atas, hanya saja dibuat dalam bentuk teks.
Di lingkungan pengembangan (environment) “production”, biasanya debug pada peramban dimatikan oleh pemrogram. Tentu saja, hal ini menghindari bug dalam aplikasi tidak terkekspos ke publik.
Karena pesan kesalahan tidak ditampilkan langsung di peramban, maka kita diharuskan untuk melihat langsung pesan rincinya pada berkas log. Berkas log ini agak susah dibaca manusia karena ada banyak informasi yang tidak begitu penting, tapi ditulis di dalamnya. Alhasil, ada puluhan baris pesan yang dihasilkan hanya untuk satu pesan kesalahan.
[2017-05-29 03:58:27] local.ERROR: ErrorException: Undefined variable: name in /home/yugo/Documents/Web/PHP/laravel/storage/framework/views/2a0543411f13e014e17d7c01551cbb16357724e6.php:82 Stack trace: #0 /home/yugo/Documents/Web/PHP/laravel/storage/framework/views/2a0543411f13e014e17d7c01551cbb16357724e6.php(82): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8, 'Undefined varia...', '/home/yugo/Docu...', 82, Array) #1 /home/yugo/Documents/Web/PHP/laravel/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php(42): include('/home/yugo/Docu...')
Seperti pesan kesalahan di atas misalnya. Pada dasarnya, yang dibutuhkan hanya baris pertama dengan kata awalan local.ERROR
, sisanya tidak begitu diperhatikan untuk debugging. Nah, jika pesan kesalahan tersebut sudah terlalu banyak, maka tentunya akan semakin sulit untuk mencari inti kesalahan aplikasi.
Cara mudahnya, kita bisa memanfaatkan perintah tail
dan grep
yang ada di Linux.
tail prints the last 10 lines of each FILE to standard output. With more than one FILE, it precedes each set of output with a header giving the file name. If no FILE is specified, or if FILE is specified as a dash (“–“), tail reads from standard input.
grep, which stands for “global regular expression print,” processes text line by line and prints any lines which match a specified pattern.
Dengan menggunakan kedua kombinasi perintah di atas, kita akan menampilkan pesan kesalahan terakhir pada berkas log dan menyaringnya hanya menampilkan yang mengandung katakunci production.ERROR
(dengan asumsi environment di Laravel sudah diubah menjadi “production”).
Walau dalam pengembangan menggunakan sistem operasi Window atau Mac, tapi saya yakin sebagian besar menggunakan server Linux untuk aplikasi berbasis PHP. Oh ya, tips ini juga hanya bisa diimplementasikan bagi kalian yang bisa mengakses server melalui Command Line Interface (CLI).
***
Masuk ke dalam direktori root aplikasi Laravel. Jalankan perintah di bawah pada terminal.
tail -f storage/logs/laravel.log | grep 'production.ERROR'
Opsi -f
pada perintah tail
berfungsi untuk mengikuti teks terbaru yang ditambahkan pada berkas log. Sesaat setelah pesan kesalahan ditambahkan, saat itu juga pesan kesalahan ditampilkan di terminal.
Dapat dilihat pada gambar di bawah, yang mana terminal hanya menampilkan pesan kesahalan yang mengandung katakunci sesui dengan definisi regex pada perintah grep
(dalam gambar saya masih menggunakan environment “local”).
Selain cara sederhana di atas, kalian juga bisa menggunakan package untuk menampilkan log tersebut pada peramban. Salah satunya menggunakan package Laravel Log Viewer.
Untuk error reporting yang lebih mantab, saya sarankan menggunakan Rollbar. Integrasinya dengan Laravel lebih mudah dengan adanya package Laravel Rollbar.
Jika menggunakan Laravel Log Viewer kita harus membuka web dan memeriksanya secara manual, dengan Rollbar, kita bisa mendapatkan informasi langsung (melalui email) bug di aplikasi. Semakin cepat dapat informasi bug, maka semakin cepat juga kita bisa memperbaiki bug tersebut bukan?
Originally published at www.laravel.web.id on May 29, 2017.