Ich denke, dass MVC, ASP und Ihr bevorzugtes Protokollierungs- / Ausnahmebehandlungs-Framework Ihre Ziele recht gut handhaben können. Sowohl ELMAH als auch Enterprise Library bieten eine benutzerfreundliche Ausnahmebehandlung und Protokollierung. Wählen Sie also Ihren Favoriten aus. Ich werde hier nicht auf die Vor- und Nachteile eingehen.
HINWEIS: Sie können keine benutzerfreundliche Fehlerseite anzeigen UND kein HTTP 404 oder 500 zurückgeben, wie in Ihrer Frage vorgeschlagen. Wenn Sie eine angezeigte Fehlerseite zurückgeben, lautet der an Ihren Browser zurückgegebene HTTP-Code 302. Dies ist eine Weiterleitung zur angezeigten Fehlerseite.
Freundliche Fehlerseiten
Es hört sich so an, als könnten Sie Ihre Ziele mit den altmodischen web.config-Einstellungen erreichen, die seit einiger Zeit Teil von ASP.net sind. Sie erwähnen das Anzeigen von Debug-Informationen in dev und das Anzeigen benutzerfreundlicher Seiten in production. Sie können dazu den benutzerdefinierten Fehlerbereich der web.config verwenden (Set CustomErrors = "Off", um Debug-Informationen anzuzeigen). Ich gehe davon aus, dass Sie mit dem CustomErrors-Attribut vertraut sind, wenn Sie es nicht lesen:
http://msdn.microsoft.com/en-us/library/h0hfz6fc.aspx
Wenn Sie genauer steuern möchten, welche Fehleransichten angezeigt werden, verwenden Sie das HandleError-Attribut von MVC. Auf diese Weise können Sie für jede Aktion / Steuerung unterschiedliche Fehleransichten auswählen.
http://weblogs.asp.net/scottgu/archive/2008/07/14/asp-net-mvc-preview-4-release-part-1.aspx
Ausnahmeprotokollierung
Es hört sich so an, als ob Sie auf alle Ihre Ausnahmen auf dieselbe Weise reagieren möchten ('Fehler protokollieren und per E-Mail an den Administrator in der Produktion senden'). In diesem Fall können Sie am einfachsten Code hinzufügen
Application_Error (Objektabsender, EventArgs e)
in deinem global.asax. Hier können Sie an das von Ihnen gewählte Protokollierungsframework übergeben.
Wenn Sie mehr Kontrolle über die Protokollierung / Behandlung von Ausnahmen haben möchten, können Sie HandleErrorAttribute in Unterklassen unterteilen und überschreiben
OnException(System.Web.Mvc.ExceptionContext filterContext)
Dies ist ein weiterer Ort, an dem Sie an das von Ihnen gewählte Protokollierungsframework weitergeben können.
https://stackoverflow.com/questions/183316/asp-net-mvc-handleerror
Dies gibt Ihnen mehr Kontrolle als die oben erwähnte Application_Error-Technik.
Im Allgemeinen können Sie mit MVC die Fehlerbehandlung sehr genau steuern. Wenn Sie dieses Steuerelement nicht benötigen, können Sie auf die ASP.net-Methoden zurückgreifen, um beispielsweise Fehlerseiten in Ihrer web.config zu definieren.