【发布时间】:2017-04-18 20:34:36
【问题描述】:
如何记录 Web Api 2 中所有操作返回的所有 Internal Server Error 500 错误?您如何拦截错误以记录堆栈跟踪?
【问题讨论】:
标签: logging asp.net-web-api asp.net-web-api2 interceptor
如何记录 Web Api 2 中所有操作返回的所有 Internal Server Error 500 错误?您如何拦截错误以记录堆栈跟踪?
【问题讨论】:
标签: logging asp.net-web-api asp.net-web-api2 interceptor
我只是想保持简单,并确保我记录了异常。
创建一个如下所示的 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
您可以使用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 路径来检查错误。 (您的应用程序是安全的,因为此路径将仅根据默认配置从托管计算机执行)。
【讨论】: