エラー発生時エラー情報を画面に表示していたが
エンドユーザーからPCが壊れたと勘違いするので表示を辞めた。
今まではglobal.asaxのクラスApplicarion_Error内に
エラー内容をログとして出力していたがcontoller内のエラーはApplication_Errorを
通過しないことが分かった。
方法としてfilterにhandleerrorattributeと同様にログ出力クラスを定義する。
上記クラスでログ出力を行う。
https://paulthecyclist.com/2013/05/17/log-all-mvc-errors/
上記リンク先を参照
自分はlog4net ではなくNLogを使用しました。
App_Start/FilterConfig.cs
public class FilterConfig {private static ILogger logger = LogManager.GetLogger("logfile");
public static void RegisterGlobalFilters(GlobalFilterCollection filters, ILogger logger) {
filters.Add(new HandleErrorAttribute());
filters.Add(new ExceptionLoggingFilter(logger)); // add
}
}
ExceptionLoggingFilter.cs
public class ExceptionLoggingFilter : IExceptionFilter {private static ILogger _logger = LogManager.GetLogger("logfile");
public ExceptionLoggingFilter(ILogger logger) {
_logger = logger;
}
public virtual void OnException(ExceptionContext filterContext) {
_logger.Error("contller : " + filterContext.Controller);
_logger.Error(filterContext.Exception);
}
public interface IExceptionFilter {
void OnException(ExceptionContext filterContext);
}
}
Global.asax.cs
protected void Application_Start(){
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ILogger logger = LogManager.GetLogger("logfile");
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters, logger);
}
0 件のコメント:
コメントを投稿