Wha*_*Man 3 error-handling elmah global-asax asp.net-mvc-4
我有一个MVC 4 Web应用程序。使用ELMAH和Elmah.Contrib.WebApi,可以完美记录我的控制器或API控制器(或其底层服务)中发生的任何异常。
我遇到麻烦的地方是手动记录错误。具体来说,在Global.asax中,我有很多初始化代码(设置自动映射器等)。为了捕获初始化代码中可能发生的问题,我具有以下内容:
protected void Application_Start()
{
try
{
ControllerBuilder.Current.SetControllerFactory(new ErrorHandlingControllerFactory());
GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute());
AutoMapperConfiguration.Configure();
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
DatabaseConfig.Initialize();
SecurityConfig.Initialize();
}
catch (Exception e)
{
var context = HttpContext.Current;
var signal = ErrorSignal.FromContext(context);
if (signal != null)
{
signal.Raise(e, context);
}
}
}
Run Code Online (Sandbox Code Playgroud)
ELMAH永远不会记录在“ catch”块内捕获的任何异常。但是,我知道ELMAH正在工作,因为从此以后,任何控制器内部都会记录任何其他异常。因此,我排除了web.config之类的问题。
有什么建议么?谢谢。
当Applicaiton执行代码时Application_Start,仍在对其进行初始化,并且不处理任何HttpRequest。
因此,您的代码存在的问题HttpContext是null。实际上,“ ErrorSignal.FromContext(context);”行将引发一个ArgumentNullException。
但是,当没有HttpContext时,您仍然可以使用Elmah(它将基本上记录错误消息和堆栈跟踪信息),如本问题所述。
因此,您的收获将是:
catch (Exception e)
{
ErrorLog.GetDefault(null).Log(new Error(e));
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
1179 次 |
| 最近记录: |