在Web Api中记录500个错误2

时间:2015-02-03 16:58:06

标签: logging asp.net-web-api asp.net-web-api2 interceptor

如何记录Web Api 2中所有操作返回的所有内部服务器错误500错误?如何拦截错误以便能够记录堆栈跟踪?

2 个答案:

答案 0 :(得分:8)

我只想保持简单并确保记录异常。

创建一个ExceptionFilter类,如下所示

public class ExceptionFilter : ExceptionFilterAttribute
{
    public override void OnException(HttpActionExecutedContext actionExecutedContext)
    {
        // actionExcutedContext.Exception is the exception log it however you wish
        Log.Exception(actionExecutedContext.Exception);

        actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse(HttpStatusCode.InternalServerError, new
                                                                                                                          {
                                                                                                                              actionExecutedContext.Exception.Message
                                                                                                                          });
    }
}

您还必须配置WebAPI以调用过滤器。这是在您创建配置时完成的。

config.Filters.Add(new ExceptionFilter());

Log.Exception行只是我的帮助类,您可以根据自己的选择进行记录。

答案 1 :(得分:3)

您可以使用Elmah.MVC NuGet包。

  

ELMAH(错误记录模块和处理程序)是一个应用程序范围   错误日志记录工具,完全可插拔。有可能   动态添加到正在运行的ASP.NET Web应用程序,甚至全部   一台机器上的ASP.NET Web应用程序,无需任何操作   重新编译或重新部署。

     

一旦ELMAH被放入正在运行的Web应用程序中   如果配置得当,您将获得以下设施   更改代码的一行:

     

记录几乎所有未处理的异常。一个远程的网页   查看重新编码的异常的整个日志。远程查看的网页   任何一个记录异常的完整细节,包括彩色堆栈   痕迹。在许多情况下,您可以查看原始的黄色屏幕   ASP.NET为特定异常生成的死亡,即使是   customErrors模式已关闭。每个错误的电子邮件通知   它发生的时间。来自日志的最后15个错误的RSS提要。

在Web API项目中注册Elmah后,您可以在Web应用程序中注册自定义过滤器,该过滤器将自动记录所有未经处理的例外情况。

public class UnhandledExceptionFilter : ExceptionFilterAttribute
{
    public override void OnException(HttpActionExecutedContext context)
    {
        //If you do not want to use Elmah, you can manually handle your ex here
        Elmah.ErrorLog.GetDefault(HttpContext.Current).Log(new Elmah.Error(context.Exception));
    }
}

您可以在WebApiConfig.cs文件中注册此自定义过滤器。

config.Filters.Add(new UnhandledExceptionFilter());

配置完成后,您可以通过浏览根目录中的/elmah路径来检查错误。 (您的应用程序是安全的,因为此路径将仅按照默认配置从托管计算机执行。)

enter image description here