Я думаю, що MVC, ASP та ваша улюблена система обробки журналів / винятків може досить добре впоратися з вашими цілями. І ELMAH, і Enterprise Library забезпечують просту у використанні обробку винятків та ведення журналів, тому вибирайте улюблені. Я не збираюся вникати в плюси та мінуси кожного з них.
ПРИМІТКА. Ви не можете відображати дружню сторінку помилки та повертати HTTP 404 або 500, як пропонує ваше запитання. Коли ви повернете дружню сторінку помилки, HTTP-код, повернутий у ваш браузер, буде 302. Це перенаправлення на дружню сторінку помилки.
Дружні сторінки помилок
Здається, що ви можете досягти своїх цілей завдяки хорошим налаштованим налаштуванням web.config, які вже деякий час є частиною ASP.net. Ви згадуєте показ інформації про налагодження, коли знаходитесь у програмі та показуєте дружні сторінки у виробництві. Для цього можна скористатися розділом користувацьких помилок web.config (Установити CustomErrors = "Вимкнено" для відображення інформації про налагодження). Я припускаю, що ви знайомі з атрибутом CustomErrors, якщо не читаєте цього:
http://msdn.microsoft.com/en-us/library/h0hfz6fc.aspx
Якщо вам потрібен більш детальний контроль над тим, які вікна помилок відображаються, то використовуйте атрибут HandleError від MVC. Таким чином, ви можете вибрати різні види помилок для кожної дії / контролера.
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 способів вчинити такі дії, як визначення сторінок помилок на веб-сайті.