ฉันคิดว่า MVC, ASP และเฟรมเวิร์กการจัดการข้อยกเว้น / บันทึกที่คุณชื่นชอบสามารถจัดการกับเป้าหมายของคุณได้เป็นอย่างดี ทั้ง ELMAH และ Enterprise Library ให้การจัดการและการบันทึกที่ง่ายต่อการใช้ดังนั้นโปรดเลือกรายการโปรดของคุณ .. ฉันจะไม่เข้าไปดูข้อดีข้อเสียของแต่ละข้อที่นี่
หมายเหตุ: คุณไม่สามารถแสดงหน้าข้อผิดพลาดที่เป็นมิตรและส่งคืน HTTP 404 หรือ 500 ตามที่คำถามของคุณแนะนำ เมื่อคุณกลับหน้าข้อผิดพลาดที่จำง่ายรหัส HTTP ที่ส่งคืนไปยังเบราว์เซอร์ของคุณจะเป็น 302 นี่คือการเปลี่ยนเส้นทางไปยังหน้าข้อผิดพลาดที่เป็นมิตร
หน้าข้อผิดพลาดที่เป็นมิตร
ดูเหมือนว่าคุณจะสามารถบรรลุเป้าหมายของคุณได้ด้วยการตั้งค่า web.config ที่ดีซึ่งเป็นส่วนหนึ่งของ ASP.net มาระยะหนึ่ง คุณพูดถึงการแสดงข้อมูลการแก้ปัญหาเมื่อใน dev และแสดงหน้าเป็นมิตรในการผลิต คุณสามารถใช้ส่วนข้อผิดพลาดที่กำหนดเองของ web.config สำหรับสิ่งนี้ (ตั้งค่า CustomErrors = "Off" เพื่อแสดงข้อมูลการดีบัก) ฉันจะสมมติว่าคุณคุ้นเคยกับแอตทริบิวต์ CustomErrors หากไม่ได้อ่าน:
http://msdn.microsoft.com/en-us/library/h0hfz6fc.aspx
หากคุณต้องการความละเอียดที่มากกว่าในการควบคุมมุมมองข้อผิดพลาดที่คุณแสดงให้ใช้แอตทริบิวต์ HandleError ของ MVC วิธีนี้คุณสามารถเลือกมุมมองข้อผิดพลาดที่แตกต่างกันสำหรับแต่ละ Action / Controller
http://weblogs.asp.net/scottgu/archive/2008/07/14/asp-net-mvc-preview-4-release-part-1.aspx
การบันทึกข้อยกเว้น
ดูเหมือนว่าคุณต้องการตอบสนองต่อข้อยกเว้นทั้งหมดของคุณในลักษณะเดียวกัน ('บันทึกข้อผิดพลาดและส่งอีเมลให้ผู้ดูแลระบบในการผลิต') หากเป็นกรณีนี้ตัวเลือกที่ง่ายที่สุดของคุณคือการเพิ่มรหัสไป
Application_Error (ผู้ส่งวัตถุ, EventArgs e)
ใน global.asax ของคุณ นี่คือที่ที่คุณสามารถส่งต่อไปยังเฟรมเวิร์กการบันทึกที่คุณเลือก
หากคุณต้องการควบคุมการบันทึก / จัดการข้อยกเว้นของคุณมากขึ้นคุณสามารถคลาสย่อย HandleErrorAttribute และแทนที่
OnException(System.Web.Mvc.ExceptionContext filterContext)
นี่เป็นอีกที่ที่คุณสามารถส่งต่อไปยังเฟรมเวิร์กการบันทึกที่คุณเลือก
https://stackoverflow.com/questions/183316/asp-net-mvc-handleerror
สิ่งนี้ทำให้คุณสามารถควบคุมได้มากกว่าเทคนิค Application_Error ที่กล่าวถึงข้างต้น
โดยทั่วไป MVC ช่วยให้คุณควบคุมการจัดการข้อผิดพลาดได้อย่างละเอียด หากคุณไม่ต้องการการควบคุมนี้คุณสามารถถอยกลับไปใช้วิธีการของ ASP.net ในการทำสิ่งต่าง ๆ เช่นการกำหนดหน้าข้อผิดพลาดบน web.config ของคุณ