void Application_Error(object sender, EventArgs e) { try { var httpContext = ((MvcApplication)sender).Context; var currentController = string.Empty; var currentAction = string.Empty; var currentRouteData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext)); Logger logger = LogManager.GetLogger(_loggerName); if (currentRouteData != null) { if (currentRouteData.Values["controller"] != null && !String.IsNullOrEmpty(currentRouteData.Values["controller"].ToString())) { currentController = currentRouteData.Values["controller"].ToString(); } if (currentRouteData.Values["action"] != null && !String.IsNullOrEmpty(currentRouteData.Values["action"].ToString())) { currentAction = currentRouteData.Values["action"].ToString(); } LogEventInfo info = new LogEventInfo(LogLevel.Error, ECMSSettings.DEFAULT_LOGGER, currentController + "--" + currentAction); DependencyManager.Logger.Log(info); } var ex = Server.GetLastError(); var controller = new ErrorController(); var routeData = new RouteData(); var action = "Index"; if (ex != null) { LogEventInfo info = new LogEventInfo(LogLevel.Error, ECMSSettings.DEFAULT_LOGGER, ex.ToString()); DependencyManager.Logger.Log(info); } if (ex is HttpException) { var httpEx = ex as HttpException; switch (httpEx.GetHttpCode()) { case 404: action = "NotFound"; break; default: action = "Index"; break; } } httpContext.ClearError(); httpContext.Response.Clear(); httpContext.Response.StatusCode = ex is HttpException ? ((HttpException)ex).GetHttpCode() : 500; httpContext.Response.TrySkipIisCustomErrors = true; routeData.Values["controller"] = "Error"; routeData.Values["action"] = action; controller.ViewData.Model = new HandleErrorInfo(ex, currentController, currentAction); MemoryTarget memTarget = LogManager.Configuration.AllTargets[LogManager.Configuration.AllTargets.Count - 1] as MemoryTarget; if (memTarget != null) { controller.ViewData["Logs"] = memTarget.Logs; } ((IController)controller).Execute(new RequestContext(new HttpContextWrapper(httpContext), routeData)); } catch (Exception ex) { LogEventInfo info = new LogEventInfo(LogLevel.Error, ECMSSettings.DEFAULT_LOGGER, ex.ToString()); DependencyManager.Logger.Log(info); } }