Error & Logging ใน Laravel

ค่าเริ่มต้น (default) ของการแสดงข้อมูลเกี่ยวกับ Error จะถูกเปิดใช้งานไว้อยู่แล้ว เพื่อนๆ ที่เคยใช้ Laravel ก็อาจจะเคยเห็นอยู่บ้าง ^^ แน่นอนว่าตอนที่เรากำลังพัฒนาเว็บของเราก็จะต้องเปิดไว้อยู่แล้ว (เอาให้เห็นกันไปเลยว่า error  อะไร) แต่ถ้าจะเอาขึ้น production ก็แนะนำให้ปิดไว้จะดีกว่านะครับ โดยเข้าไปแก้ไขค่า debug ในไฟล์ /app/config/app.php จาก true เป็น false ครับ

Laravel มี error handler สำหรับจัดการกับ error ทั้งหมด (global) อยู่ที่ไฟล์ app/start/global.php มีหน้าตาประมาณนี้ครับ

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

โดย Error Handler นี้จะเป็นแบบง่ายที่สุด (basic) ที่จะถูกเรียกใช้เมื่อมี error เกิดขึ้น แต่ไม่ใช่ว่าเราจะทำอะไรกับเค้าไ่มได้ เราสามารถสร้าง Error Handler ที่เฉพาะลงไปอีกได้ครับ อย่างเช่น InvalidUserException หรือ Exception อื่นๆ ที่เราสร้างขึ้นมาเอง

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

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

สำหรับ php fatal error ที่เราไม่อยากให้ client เราเห็นเราก็สามารถจัดการได้ว่าจะให้แสดงอะไร โดยระบุไว้ที่ App:fatal จะได้ซ่อนๆ ไว้หน่อย ^^

App::fatal(function($exception)
{
    //เกิด fatal error แล้วจะให้ทำอะไรบ้าง
});

ส่วนที่เป็น HTTP Exception จะมีฟังก์ชัน App::abort ให้ใช้ เช่น 404 Page not found, 401 Unauthorized เป็นต้น

App::abort(404, 'Page not found');

401 Unauthorized ข้อความเราสามารถแก้ไขได้นะครับ ^^

App::abort(401, 'ไม่มีสิทธิ์เข้าใช้งาน');

สำหรับ Logging จะมีคลาส Log ให้เราเรียกใช้ฟังก์ชันที่มีไว้ให้ก็จะแบ่งตามระดับของ log ที่เราต้องการ ซึ่งจะมีอยู่ 7 ระดับ คือ debug, info, notice, warning, error, critical และ alert ครับ

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

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

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

สามารถอ่านข้อมูลเพิ่มเติมได้ที่ Error & Logging – Laravel PHP Framework