Error & Log

Konfigurasi

Pengelola log pada aplikasi teregistrasi pada start file  app/start/global.php . Secara default, penulisan log dikonfigurasi untuk menggunakan file log tunggal. Akan tetapi, Anda bisa mengaturnya sesuai kebutuhan. Karena Laravel menggunakan log library Monolog, Anda bisa mengambil manfaat dr penanganan log yg library tsb miliki.

Misalnya, jika Anda ingin menggunakan log harian drpd file tunggal, yg besar, Anda bisa melakukan perubahan berikut:

$logFile = 'laravel.log';

Log::useDailyFiles(storage_path().'/logs/'.$logFile);

Detail Error

Secara default, fungsi detail error dihidupkan pada aplikasi. Artinya ketika terjadi error Anda akan melihat halaman error beserta pesan error & setumpuk jejak rinciannya. Anda bisa mematikan fungsi detail error melalui seting opsi debug pada file app/config/app.php menjadi false.

Note: Sangat dianjurkan untuk mematikan fungsi detail error pada lingkungan produksi, penerapan aplikasi yg sebenarnya pada client.

Menangani Error

Secara default, file app/start/global.php berisi penanganan error untuk semua eksepsi:

App::error(function(Exception $exception)
{
 Log::error($exception);
});

Ini adalah pengendali error paling dasar. Akan tetapi, Anda dapat menuliskan penanganan lebih lanjut sesuai kebutuhan. Pengendali error dipanggil berdasarkan jenis petunjuk (type-hint) dr eksepsi yg ditangani. Contohnya, Anda bisa membuat pengendali error yg hanya menangani instan RuntimeException:

App::error(function(RuntimeException $exception)
{
 // Handle the exception...
});

Jika pengendali eksepsi memiliki return respon, respon tsb akan diberikan kepada browser dan takada pengendali error lain yg akan dipanggil:

App::error(function(InvalidUserException $exception)
{
 Log::error($exception);

 return 'Sorry! Something is wrong with this account!';
});

Untuk mendengarkan PHP fatal error, Anda bisa menggunakan perintah App::fatal:

App::fatal(function($exception)
{
 //
});

Jika Anda memiliki beberapa pengendali error, semua harus didefinisikan mulai dr yg paling umum ke yg spesifik. Jadi, contohnya, sebuah pengendali error yg menangani semua eksepsi dgn tipe  Exception harus didefinisikan sebelum tipe eksepsi khusus/detail seperti Illuminate\Encryption\DecryptException.

Dimana Harus Menempatkan Pengendali Error

Tidak ada ruang khusus untuk meregistrasikan pengendali error. Laravel memberikan kebebasan pada area ini. Salah satu opsi yg bisa dipilih adalah menempatkannya pada file start/global.php. Secara umum, file tsb adalah tempat yg nyaman untuk menempatkan berbagai perintah/kode “bootstrapping”. Jika file tsb sudah terasa penuh, Anda bisa membuat file app/errors.php, dan berikan perintah require file tsb pada skrip file start/global.php. Opsi ketiga adalah membuat sebuah service provider yg meregistrasikan pengendali tsb. Sbg pengingat, tak ada satu cara dianggap “paling benar”. Pilih lokasi/cara yg paling nyaman menurut Anda.

HTTP Exception

Beberapa exception memberikan penjelasan kode error HTTP dr server. Misal, halaman tidak ditemukan, “page not found”, error (404), atau “unauthorized error” (401) atau mungkin developer memberikan error 500. Untuk memberikan kode error tsb sbg return respon, gunakanlah:

App::abort(404);

Bisa jg memberikan keterangan respon tambahan:

App::abort(403, 'Unauthorized action.');

Perintah ini dapat digunakan kapan saja diantara request-lifecycle.

Menangani 404 Error

Anda bisa meregistrasikan pengendali-error yg menangani semua error “404 Not Found” pada aplikasi, memeberikan keleluasaan/kebebasan untuk memberikan halaman/respon errors 404:

App::missing(function($exception)
{
 return Response::view('errors.missing', array(), 404);
});

Log

Fasilitas Log Laravel menyediakan lapisan sederhana diatas library Monolog yg telah dikenal powerful. Secara default, Laravel dikonfigurasi untuk membuat file log tunggal untuk aplikasi, dan file ini tersimpan di app/storage/logs/laravel.log. Anda dapat menuliskan informasi ke log sbb:

Log::info('This is some useful information.');

Log::warning('Something could be going wrong.');

Log::error('Something is really going wrong.');

Pencatatan Log menyediakan 7 level log sebagaimana dijelaskan pada RFC 5424debuginfonoticewarningerrorcritical, dan alert.

Sebuah array dr konteks data dapat diberikan pada perintah log:

Log::info('Log message', array('context' => 'Other helpful information'));

Monolog punya berbagai penanganan tambahan yg mungkin dapat digunakan u/ membuat log. Jika dibutuhkan, Anda bisa mengakses instan-class Monolog dasar yg sedang digunakan Laravel:

$monolog = Log::getMonolog();

Anda jg bisa meregistrasikan semacam event untuk menangkap semua pesan yg diberikan ke Log:

Registrasikan Sebuah Pendengar Log

Log::listen(function($level, $message, $context)
{
 //
});