使用Elmah使用IExceptionFilter捕获未处理的异常

本文关键字:使用 异常 未处理 Elmah IExceptionFilter | 更新日期: 2023-09-27 18:17:42

我试图转换一些代码,我发现MVC工作在常规的Asp.Net。简而言之,我希望能够使用Elmah记录处理过的异常,而不必在每次异常发生时调用日志方法。我已经环顾四周,所有的解决方案,我发现使用MVC。我在这里找到了一个简单而优雅的,即使我的应用程序使用MVC进行客户端调用,它也不是一个完整的MVC项目,所以我猜它不会工作,或者我错过了一些东西。

这里是代码
public class ElmahHandledErrorLoggerFilter : IExceptionFilter
{
    public void OnException (ExceptionContext context)
    {
        // Log only handled exceptions, because all other will be caught by ELMAH anyway.
        if (context.ExceptionHandled)
            ErrorSignal.FromCurrentContext().Raise(context.Exception);
    }
}

public static void RegisterGlobalFilters (GlobalFilterCollection filters)
{
    filters.Add(new ElmahHandledErrorLoggerFilter());
    filters.Add(new HandleErrorAttribute());
}

来自:如何让ELMAH与ASP一起工作。. NET MVC [HandleError]属性?

表示将第二个代码块放置在全局文件中。asax文件。事件从来没有为我调用过,所以我在想我是否必须自己调用它,如果我这样做了,那么我传递给它的是什么?我更想知道等价的常规asp . net将是我不熟悉MVC,虽然因为我有一个参考MVC dll我会开放试图让它的工作"原样",如果有人有想法。

使用Elmah使用IExceptionFilter捕获未处理的异常

. NET有不同的管道来加载页面,过滤器不会应用于这些页面请求。但是,它将针对MVC特定的路由执行,并且您找到的解决方案确实是最好的。也有一些NuGet包具有相同的实现。

标准的ELMAH包应该已经捕获了所有未处理的异常,也适用于ASP。NET窗体应用程序。我建议您按照标准文档进行设置。