MVC4 アプリケーションで使用する Custom HandleErrorAttribute を取得できません。
例外をログに記録するカスタム クラス
public class HandleAndLogErrorAttribute : HandleErrorAttribute
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
public override void OnException(ExceptionContext filterContext)
{
var message = string.Format("Exception : {0}\n" +
"InnerException: {1}",
filterContext.Exception,
filterContext.Exception.InnerException);
Logger.Error(message);
base.OnException(filterContext);
}
}
Global.asax に、新しい静的メソッドを追加しました。
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleAndLogErrorAttribute()); //Todo: log all errors
throw new Exception("not called???");
}
}
例外がスローされると、error.chstml が読み込まれますが、カスタム HandlErrorAttribute の OnException オーバーライドは呼び出されません。
Global.asax の RegisterGlobalFilters メソッドが呼び出されていないと思われ、そこで例外をスローすると (コードを参照)、これが確認されます。その例外はスローされません。
web.config ファイルで、customErrors をオンに設定しました。
<customErrors mode="On">
</customErrors>
別のソリューションで同じアプローチを使用しましたが、この HandleErrorAttribute 拡張が機能しない理由がわかりません。