本番環境で発生する可能性のあるすべてのエラーが適切にログに記録されることが非常に重要な MVC3 アプリケーションがあります。
現在のアプローチでは IExceptionFilter.OnException を使用しています。この機能は、他のすべてのコントローラーが継承する BaseContorller に適用され、次のように見えます (少し簡略化されています)。
public class BaseController : Controller, IExceptionFilter
{
protected override void OnException(ExceptionContext exceptionContext)
{
Logger.Error(exceptionContext.Exception);
}
}
このアプローチは、次の場合に非常にうまく機能します。
コントローラー アクション メソッド内のコードで発生する例外
コンパイル エラーを含む、コントローラ メソッドによって返されたビューに起因する例外
- コントローラーに適用されるフィルターの例外
ただし、このアプローチを使用してもキャッチされない例外があります。
- コントローラー コンストラクター内でスローされる例外
- 次のようなアプリケーション ルーチンでスローされる例外: RegisterGlobalFilters、RegisterRoutes、Application_Start
- ページが見つかりません (404)
コントローラー レベルの例外処理で見逃す可能性があると考えられる他の種類の例外はありますか?
Application_Error または ELMAH を使用してロギングの追加レイヤーを実装する可能性が高く、これらの例外がログに記録されずにすり抜けないことを確認したいので、質問しています。