Saya pikir MVC, ASP, dan kerangka penanganan logging / pengecualian favorit Anda dapat menangani tujuan Anda dengan cukup baik. ELMAH dan Enterprise Library keduanya menyediakan penanganan pengecualian dan pencatatan yang mudah digunakan, jadi pilihlah favorit Anda .. Saya tidak akan membahas pro dan kontra dari masing-masing di sini.
CATATAN: Anda tidak dapat menampilkan halaman kesalahan yang ramah DAN mengembalikan HTTP 404 atau 500 seperti yang disarankan pertanyaan Anda. Saat Anda mengembalikan halaman kesalahan ramah, kode HTTP yang dikembalikan ke browser Anda adalah 302. Ini adalah pengalihan ke halaman kesalahan ramah.
Halaman Kesalahan Ramah
Sepertinya Anda dapat mencapai tujuan Anda dengan pengaturan web.config yang bagus yang telah menjadi bagian dari ASP.net selama beberapa waktu. Anda menyebutkan menunjukkan informasi debug ketika di dev dan menampilkan halaman ramah dalam produksi. Anda dapat menggunakan bagian kesalahan khusus web.config untuk ini (Setel CustomErrors = "Off" untuk menampilkan informasi debug). Saya akan menganggap bahwa Anda terbiasa dengan atribut CustomErrors, jika tidak membaca ini:
http://msdn.microsoft.com/en-us/library/h0hfz6fc.aspx
Jika Anda memerlukan granularity kontrol yang lebih besar atas tampilan kesalahan yang Anda tampilkan, maka gunakan HandleError Attribute MVC. Dengan cara ini Anda dapat memilih tampilan kesalahan yang berbeda untuk setiap Tindakan / Pengendali.
http://weblogs.asp.net/scottgu/archive/2008/07/14/asp-net-mvc-preview-4-release-part-1.aspx
Log Pengecualian
Sepertinya Anda ingin menanggapi semua pengecualian Anda dengan cara yang sama ('Kesalahan log dan kirim ke administrator dalam produksi'). Jika demikian, opsi paling sederhana Anda adalah menambahkan kode
Application_Error (pengirim objek, EventArgs e)
di global.asax Anda. Di sinilah Anda bisa menyampaikan kerangka logging yang Anda pilih.
Jika Anda ingin kontrol lebih besar atas penebangan / penanganan pengecualian Anda, maka Anda dapat mensubklasifikasikan HandleErrorAttribute dan menimpanya
OnException(System.Web.Mvc.ExceptionContext filterContext)
ini adalah tempat lain di mana Anda bisa menyampaikan kerangka penebangan yang Anda pilih.
https://stackoverflow.com/questions/183316/asp-net-mvc-handleerror
Ini memberi Anda lebih banyak kontrol daripada teknik Application_Error yang disebutkan di atas.
Secara umum, MVC memberi Anda kendali besar tentang cara menangani kesalahan. Jika Anda tidak memerlukan kontrol ini maka Anda dapat kembali ke ASP.net cara melakukan hal-hal seperti mendefinisikan halaman kesalahan di web.config Anda.