【问题标题】:Log 500 Errors in WebApi 2在 WebApi 2 中记录 500 个错误
【发布时间】:2017-04-18 20:34:36
【问题描述】:

如何记录 Web Api 2 中所有操作返回的所有 Internal Server Error 500 错误?您如何拦截错误以记录堆栈跟踪?

【问题讨论】:

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


    【解决方案1】:

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

    创建一个如下所示的 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 行对我来说只是一个帮助类,您可以随意记录它。

    【讨论】:

    • 要添加到此,如果您希望它捕获所有异常,您可以使用GlobalConfiguration.Configuration.Filters.Add(new ExceptionFilter()); 将其添加到ApplicationStart 上的全局文件中。有关更多方法和信息,请参阅MSDN
    【解决方案2】:

    您可以使用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 路径来检查错误。 (您的应用程序是安全的,因为此路径将仅根据默认配置从托管计算机执行)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-12
      • 2020-02-09
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 2017-04-17
      • 2014-06-18
      • 1970-01-01
      相关资源
      最近更新 更多